节点Multer内存存储:如何释放内存

use*_*178 6 node.js multer

Ok multer支持内存存储,这很棒.

  1. 但是如何在上传文件后释放内存?

    storage = multer.memoryStorage();

    upload = multer({storage:storage}).single('image');

对于磁盘存储,我可以删除dest文件夹中的文件.

  1. 如果2个用户上传具有相同文件名的文件会发生什么情况,内存存储会发生什么?

谢谢 !

EMX*_*EMX 12

  1. 但是上传文件后如何释放内存?

完成请求后,内存将被释放.

(当垃圾收集器(GC)清理时,通常几乎直接)

  1. 如果2个用户上传具有相同文件名的文件会发生什么情况,内存存储会发生什么?

您不必担心,因为每个文件都在其自己的范围内处理,这意味着,就像我上面提到的,每个请求都被处理,然后,一旦完成请求被清除(连同存储的request.file来自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
    })
  }))
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,文件只是被流式传输到回调(cb),因此没有全局引用会使它不能存在于内存中(不再引用它=不再需要= garbage = GC)


memoryStorage主要用于临时处理文件缓冲区.

示例:您希望接收小文件并将其转发到另一个存储媒体的服务器.(multer在内存temp中接收存储,一旦没有对它的引用就会自行中继和释放内存)