在Express JS中使用Multer基于扩展名过滤文件

如问题标题所述,我需要根据文件扩展名过滤上传的文件。因此,我浏览了官方文档并搜索了该网站。

我尝试过遇到的解决方案。文件已成功上传,但问题是如何过滤文件。目前,我的Router.js文件如下所示。

var multer  = require('multer');

var storage = multer.diskStorage({ //multers disk storage settings

destination: function (req, file, cb) {

cb(null, './public/uploads/')

},

limits:{

files: 1,

fileSize: 1024 * 1024

},

filename: function (req, file, cb) {

var datetimestamp = Date.now();

cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1])

},

onFileUploadStart: function(file) {

console.log("Inside uploads");

if (file.mimetype == 'image/jpg' || file.mimetype == 'image/jpeg' || file.mimetype == 'image/png') {

return true;

}

else

{

return false;

}

}

});

var upload = multer({ //multer settings

storage: storage

}).single('profilepic');

router.post('/profile', function(req, res){

upload(req,res,function(err){

if(err)

{

console.log(err);

}

else

{

console.log("Image was uploaded");

}

});

});

我试着回显某些东西,onFileUploadStart以检查它是否进入该功能。事实并非如此。此外onFileUploadStart,我也fileFilter按此链接所述进行了尝试,但没有帮助。有什么建议如何解决这个问题?提前致谢。

回答:

使用示例multer

var storage = multer.diskStorage({ //multers disk storage settings

destination: function (req, file, cb) {

cb(null, './public/uploads/')

},

filename: function (req, file, cb) {

var datetimestamp = Date.now();

cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1])

}

});

var upload = multer({ //multer settings

storage: storage,

fileFilter: function (req, file, callback) {

var ext = path.extname(file.originalname);

if(ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') {

return callback(new Error('Only images are allowed'))

}

callback(null, true)

},

limits:{

fileSize: 1024 * 1024

}

}).single('profilepic');

摘自Node.js-文件上传。原始作者是Iceman和Mikhail。归属详细信息可以在贡献者页面上找到。该来源已获得CCBY-SA 3.0的许可,可以在“

文档”存档中找到。参考主题ID:4080和示例ID:14210。

以上是 在Express JS中使用Multer基于扩展名过滤文件 的全部内容, 来源链接: utcz.com/qa/407191.html

回到顶部