我想了解如何在快递js中保护文件上传,最后我开发了以下代码来完成它。
app.use(express.json());
app.use(express.urlencoded());
app.post('/',express.bodyParser({
keepExtensions: true,
uploadDir: __dirname + '/faxFiles',
limit: '20mb'
}),function(req,res){
checkFile(req.files.faxFile);
});
如你所见,我可以限制文件大小并在bodyParser中设置uploadDir,现在我需要允许用户只上传图像和pdf,我使用的方式是checkFile
函数,其中包含以下代码。
var fs = require('fs');
var checkFile = function(faxFile){
if (faxFile.type != "image/jpeg" || faxFile.type != "application/pdf" || faxFile.type != "image/gif"){
fs.unlink(faxFile.path, function(err){
});
}
}
但我认为这不是最好的方法,有没有其他方法可以做到这一点?比如在bodyParser构造函数中设置文件扩展名?
答案 0 :(得分:1)
Express使用formidible(https://github.com/felixge/node-formidable)来解析表单数据,包括文件上传。
我没有看到强大的选项来限制文件类型,所以我建议Express也可能没有。
答案 1 :(得分:1)
您可以使用mmmagic严格检查扩展程序。它是node.js的异步libmagic绑定,用于通过数据检查检测内容类型。
答案 2 :(得分:1)
我创建了一个小小的要点,以展示如何在流式传输文件时使用mmmagic检查mime类型:
https://gist.github.com/chmanie/8520572
这更有可能在multiparty或busboy等流媒体环境中发挥作用。