使用express.js和节点上传文件,限制扩展

我正在处理file upload使用express.js和节点,并具有基本function工作。 我需要的是实施一些安全措施 – 即限制上传到某些格式(PNG,JPEG)。 有没有简单的方法只允许某些格式? 它会进入身体parsing器吗?

app.use(express.bodyParser({ uploadDir: __dirname + '/public/uploads', keepExtensions: true })); app.use(express.limit('4mb')); 

我还有其他的安全措施吗? 从图像中擦除EXIF数据通常是一个好主意?

谢谢,

根据connect的bodyParser的文档 ,任何选项也被传递给强大的 ,这是实际的表单parsing。

根据强大的文档 ,你可以传递你自己的onPart处理程序:

incomingForm.onPart(部分)

如果您有兴趣直接访问多部分stream,则可以覆盖此方法。 这样做会禁用任何将会发生的“字段”/“文件”事件处理,使您完全负责处理处理。

 incomingForm.onPart = function(part) { part.addListener('data', function() { // ... }); } 

如果你想使用强大的处理某些部分给你,你可以这样做:

 incomingForm.onPart = function(part) { if (!part.filename) { // let formidable handle all non-file parts incomingForm.handlePart(part); } } 

综合起来,你应该能够做到这样的事情:

 function onPart(part) { if(!part.filename || part.filename.match(/\.(jpg|jpeg|png)$/i)) { this.handlePart(part); } } app.use(express.bodyParser({onPart: onPart}); 

警告:我没有testing过这个。

我发现一个潜在的解决scheme

在你的中间件中,

  if (req.files[key].type != 'image/png' && req.files[key].type != 'image/jpeg'){ res.send(403); } else { next(); } 

更新:虽然这实际上并没有停止上传文件。