Multer,node.js:内存在映像上传和处理后不会被清除

我在Node.js中使用Sharp和Multer,并且有一些内存问题。 当使用此代码完成该过程时,所使用的缓冲区似乎不会被释放:

var storage = multer.memoryStorage(), upload = multer({ storage: storage }).single('picture'); router.post('/save', function (req, res) { upload(req, res, function (err) { sharp(req.file.buffer) .resize(400, 400) .max() .toFormat('jpeg') .toFile("public/images/picture.jpg", function (err) { res.send(true); }); }); }); 

每次我发送一张图片,使用的内存都会增加图片的大小,并且不会被清除。

我尝试不使用夏普(所以基本上只是发送一个文件,而没有处理它之后),但问题依然存在。

如果用户上传大量的文件,恐怕会使用大量的RAM。

我能做些什么来改善这段代码?

这与multer内存存储有关。 您的图像存储在内存中。 上传图片后,内存应该被垃圾收集器清除。 但这可能不会立即成立。 如果在大量的时间内它在内存中可用,那么可能存在内存泄漏,你应该在https://github.com/expressjs/multer/issues/中报告它。

另外在multer文件中有:

警告:使用内存存储器时,非常快速地上传非常大的文件或大量较小的文件会导致应用程序内存不足。

也许你最好使用磁盘存储? 它会慢一点,但更可靠。