Ok multer支持内存存储,这很棒。
但如何在上传文件后释放内存?
storage = multer.memoryStorage();
upload = multer({storage:storage})。single('image');
对于磁盘存储,我可以删除dest文件夹中的文件。
谢谢!
答案 0 :(得分:9)
- 但是如何在上传文件后释放内存?
醇>
一旦完成请求,内存将被释放。
(当垃圾收集器(GC)清理时,通常几乎是直接离开)
- 如果2位用户上传具有相同文件名的文件,会发生什么情况, 内存存储会发生什么?
醇>
您不必担心,因为每个文件都在自己的范围内处理,这意味着,就像我上面提到的那样,处理每个请求,然后,一旦完成请求被清除(连同存储的请求)。来自memoryStorage的文件)
我建议您检查一下multer如何处理内存存储multer/storage/memory.js (github)
MemoryStorage.prototype._handleFile = function _handleFile (req, file, cb) {
file.stream.pipe(concat(function (data) {
cb(null, {
buffer: data,
size: data.length
})
}))
}
正如您所看到的那样,文件只是被流式传输到回调(cb),因此没有全局引用可以使它不能存在于内存中(不再引用它=不再需要= garbage = GC)
memoryStorage主要用于临时处理文件缓冲区。
示例:您希望接收小文件并将其转发到另一台存储媒体的服务器。 (multer在内存temp中接收存储,一旦不再引用它就会自行中继和释放内存)