我们可以将multer配置为不在本地存储文件,仅用于使用req.files.image.path吗?

时间:2014-08-05 16:08:54

标签: node.js express npm multer

我的申请表如下: 我将图像上传到Cloudinary并将图像的url存储在我的mongodb数据库中。

要将图像上传到cloudinary,我需要提供文件路径,为此,我使用的是multer。我使用语句:

app.use(multer({dest:' ./ uploads /'}));

我面临的问题是,每次我将本地系统中的图像上传到Cloudinary上的数据库时,都会在' ./ uploads /'中创建本地副本。我希望这不会发生因为我的图像在Cloudinary上。

我读了documentation of multer所说的内容:

  

Multer接受一个选项对象,其中最基本的是dest属性,它告诉Multer上传文件的位置。如果省略options对象,则将重命名该文件并将其上载到系统的临时目录。

我无法确定该临时上传空间是否需要清理或是否需要清理。我的图像上传到Cloudinary.I仅使用了multer获取:

req.files.photo.path

工作。还有其他方法可以做同样的事情,或者multer是否可以配置为不将图像存储到本地系统?

4 个答案:

答案 0 :(得分:4)

2018年7月:

因此,如果要将图像存储到某种数据库中,则可能需要将其转换为缓冲区,然后将缓冲区插入数据库中。如果您使用multer处理多部分表单(在这种情况下为您要上传的图像文件),则可以使用multer的{​​{1}}直接获取图像的缓冲区。换句话说:

memoryStorage

获取buffer

  

使用内存存储时,文件信息将包含一个名为buffer的字段,其中包含整个文件。

这意味着您可以从var storage = multer.memoryStorage(); var upload = multer({ storage: storage }); 之类的命令获取缓冲区


我更新了一个简单的仓库,演示了将图像上传到数据库而没有在this repo上复制到本地的情况

答案 1 :(得分:3)

来自Multer的信息页面 https://www.npmjs.com/package/multer

  

如果 inMemory 选项为true - 则不会写入任何数据   磁盘,但数据保存在文件对象中可访问的缓冲区中。

答案 2 :(得分:0)

在2016年4月14日之前,您无法将multer配置为在本地存储文件。

multer只是busboy的包装。因此,如果我们想避免碰到磁盘,我们可以直接尝试使用busboy Connect-bubsboy会帮助我们:

app.use(busboy());

// request handler
req.busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
  file.on('end', function() {
    // do stuff with req.files[fieldname]
  });
});

更新14-07-2016

现在multer有MemoryStorage将文件作为缓冲区存储在内存中。

var storage = multer.memoryStorage()
var upload = multer({ storage: storage })

答案 3 :(得分:-1)

如果要使用Cloudinary存储图像,请尝试使用multer-storage-cloudinary