node表示带有均值堆栈的上传文件

时间:2014-01-17 10:39:46

标签: node.js express mean-stack

我应该实现一个上传表单 我想过使用bodysarser,但我读过 http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html

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

2 个答案:

答案 0 :(得分:6)

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

如果您想避免使用其他模块,您应该做的是在要允许文件上载的端点上实现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`
});

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

现在,告诉你所有这些,由于这个确切的问题,Connect正在努力弃用multipart,但似乎没有任何计划添加基于流的文件上传替换。他们反而建议您使用node-multiparty使用流来避免将文件放在磁盘上。但是,似乎没有任何好的参考我可以找到使用multiparty作为中间件而不保存文件,所以你必须联系多方的作者或仔细看看用它来实现它的API

答案 1 :(得分:2)

我创建了一个使用Express& amp; Multer - 非常简单,避免所有Connect警告

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