我正在使用dropzone从UI上传文件。这是我的drozone配置:
var imageUpload = new Dropzone('div#dataSection', {
url: 'api/image',
autoProcessQueue: true,
paramName: 'file'
});
我正在使用node和expressjs基于此链接构建服务器端端点
我在服务器端执行以下代码。
fs.readFile(req.files.displayImage.path, function (err, data) {
// ...
var newPath = __dirname + "/uploads/uploadedFileName";
fs.writeFile(newPath, data, function (err) {
res.redirect("back");
});
});
问题是 req.files 未定义。我错过了什么吗?
您遵循的教程已经过时了,当然是为旧版本的express
编写的。在 2014 年 4 月发布的 express
4.0 中,(几乎)所有内置中间件都被丢弃,包括将上传的文件解析为 req.files
的中间件。
这就是问题所在,解决方案是使用单独的模块来处理上传的文件。 Multer
似乎是自然的选择(感谢@Ben财富的这个建议)。
首先,安装 multer
节点.js模块:
npm install multer
然后,在服务器端的代码中:
var express = require('express')
var multer = require('multer')
var app = express()
app.use(multer({ dest: './uploads/'})) // directory to store uploaded files in
之后,所有 POST
-ed 文件都应以 Multer 文件对象的格式在路由处理程序函数中作为req.files
提供。