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

时间:2017-08-21 21:37:14

标签: node.js multer

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

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

    storage = multer.memoryStorage();

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

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

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

1 个答案:

答案 0 :(得分:9)

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

一旦完成请求,内存将被释放。

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

  
      
  1. 如果2位用户上传具有相同文件名的文件,会发生什么情况,   内存存储会发生什么?
  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中接收存储,一旦不再引用它就会自行中继和释放内存)