节点使用平均值堆栈来上传文件

我应该实现一个我认为使用bodyparser的上传forms,但我读了http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html

那么使用平均堆栈来快速上传文件的方式是什么? 可能是强大的或其他模块?

该警告特别针对将express.bodyparser中间件添加到整个堆栈,因为它将express.multipart添加到所有POST端点,因此在所有POST端点都会自动接受文件上载。 默认情况下,框架会自动将上传的文件保存到/tmp ,除非您清除它们,否则攻击者可能会用上传的文件泛滥您的磁盘。

如果你想避免使用额外的模块,你应该做的是在想要允许file upload的端点上实现express.multipart。 以下是我正在谈论的内容:

 var express = require("express") , app = express(); // middleware (no bodyparser here) app.use(express.json()); app.use(express.urlencoded()); // average GET endpoint app.get("/", function(req,res) { res.send('ok'); }); // average POST endpont app.post("/login", function(req,res) { res.send('ok'); }); // File upload POST endpoint app.post('/upload', express.multipart, function(req, res) { //File upload logic here //Make sure to delete or move the file accordingly here, otherwise files will pile up in `/tmp` }); 

请注意,在file upload端点中包含了express.multipart。 此端点现在将处理多部分file upload,并假设您正确处理它们,则不会构成威胁。

现在,告诉你所有这一切,由于这个确切的问题,连接正在转移到弃用multipart,但似乎没有任何计划添加一个基于stream的file uploadreplace。 他们推荐的是,你使用节点多方使用stream,以避免将文件放置在磁盘上。 但是,似乎没有任何好的参考资料,我可以find使用多方作为一个中间件,而不是保存文件,所以你必须联系多方的作者或仔细看看用Express实现它的API 。

我创build了一个使用Express&Multer的例子 – 非常简单,避免了所有的连接警告

https://github.com/jonjenkins/express-upload