我试图使用node.js和express 4.0.0创建一个非常简单的文件上传服务器。根据{{3}}我认为我应该得到" req.files",但它不存在(未定义)。
var express = require('express')
var fs = require('fs')
var app = express()
app.get('/', sendForm)
app.post('/upload', uploadFile)
app.listen(8000)
function sendForm(req, res)
{
// a form with a <input type="file">
res.send('<!doctype html><html><head></head><body><form action=\"/upload\" method=\"post\" enctype=\"multipart/form-data\"><input type=\"file\" name=\"displayImage\"><button type=\"submit\">submit</button></form></body></html>')
}
function uploadFile(req, res)
{
console.log(req.files) // prints undefined
res.redirect('back')
}
有些网站建议添加&#34; app.use(bodyParser)&#34;和#34; app.configure()&#34;。据我所知,&#34; app.configure&#34;已从快递4.0.0中删除。
为什么不存在req.files?
答案 0 :(得分:1)
我发现Formidabble易于使用,您可以使用它:
var formidable = require('formidable');
var fs = require('fs');
module.exports.upload = function (req, res, next) {
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
if ('file' in files) {
var file = files['file'];
// Do something with file
module.exports._deleteFiles(files);
res.send(200);
} else {
module.exports._deleteFiles(files);
res.send(400);
}
});
};
module.exports._deleteFiles = function (files) {
// Delete temporary files
for (var f in files) {
fs.unlink(files[f].path);
}
};
答案 1 :(得分:0)
最近大多数中间件都是taken out of Express。
您需要包含中间件来填充req.files
- 类似于connect-multiparty。
在您的模块导入中包含var multiparty = require('connect-multiparty');
,在您拥有app
后,添加app.use(multiparty());
的中间件。
确保清理临时文件,并且可能只将多方作为中间件传递给明确将上传的路由。