2

我在谷歌上搜索了很多如何在 express 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 构造函数中设置文件扩展名?

4

3 回答 3

1

Express 使用强大的 ( https://github.com/felixge/node-formidable ) 来解析表单数据,包括文件上传。

我没有看到限制文件类型的强大选项,所以我建议 Express 可能也没有。

于 2013-06-18T23:32:56.967 回答
1

您可以使用mmmagic来严格检查扩展。它是 node.js 的异步 lib​​magic 绑定,用于通过数据检查来检测内容类型。

于 2013-11-06T10:06:10.530 回答
1

我创建了一个小要点来展示如何在流式传输文件时使用 mmmagic 检查 mime 类型:

https://gist.github.com/chmanie/8520572

这更有可能在多方busboy等流媒体环境中发挥作用。

于 2014-01-20T14:22:23.070 回答