我的申请表如下: 我将图像上传到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是否可以配置为不将图像存储到本地系统?
答案 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