我对Multer Filename有疑问。当multer使用随机文件名存储文件时,是否会出现multer中两个文件同名的情况?基本上,我想说的是,如果我存储大量用户的文件,文件名会重复吗?我可以信任multer吗?或者我必须写一个单独的函数来给予每个文件一个唯一的文件名吗?
oxiaedzo1#
从npm页面here中,我们可以看到Multer在磁盘上存储文件的示例代码:
var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, '/tmp/my-uploads') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()) } }) var upload = multer({ storage: storage })
文件名与'-' + Date.now()连接在一起。Date.now()为您提供自1970年1月1日起的毫秒数。因此,如果两个文件在不同时间保存,它们将具有不同的名称。理论上,如果两个文件在完全相同的时间(以毫秒为单位)保存在系统中,它们将具有相同的名称。因此,它并不取决于你存储了多少文件,而是取决于请求到达你系统的速度。如果你每秒有超过1000个请求,那么就有可能出现重复。在这种情况下,你应该使用UUID之类的东西。否则,Date.now()就可以完成这项工作。
'-' + Date.now()
Date.now()
xpszyzbs2#
const multer = require('multer'); const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, '../media/'); } , filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()+'.'+file.mimetype.split('/')[1]); } }); const fileFilter = (req, file, cb) => { // reject a file if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') { cb(null, true); } else { cb(null, false); } } const upload = multer({ storage: storage, limits: { fileSize: 1024 * 1024 * 5 }, fileFilter: fileFilter }).single('profile_picture');
2条答案
按热度按时间oxiaedzo1#
从npm页面here中,我们可以看到Multer在磁盘上存储文件的示例代码:
文件名与
'-' + Date.now()
连接在一起。Date.now()
为您提供自1970年1月1日起的毫秒数。因此,如果两个文件在不同时间保存,它们将具有不同的名称。理论上,如果两个文件在完全相同的时间(以毫秒为单位)保存在系统中,它们将具有相同的名称。因此,它并不取决于你存储了多少文件,而是取决于请求到达你系统的速度。如果你每秒有超过1000个请求,那么就有可能出现重复。在这种情况下,你应该使用UUID之类的东西。否则,
Date.now()
就可以完成这项工作。Date.now()
here的信息。xpszyzbs2#