Req.files 使用 dropzone 发送文件时在服务器端未定义(使用 express & node 构建)
Req.files in undefined at the server side (built with express & node) when sending files using dropzone
我正在使用 dropzone 从 UI 上传文件。这是我的 drozone 配置:
var imageUpload = new Dropzone('div#dataSection', {
url: 'api/image',
autoProcessQueue: true,
paramName: 'file'
});
我正在使用 node 和 expressjs 基于 this link
构建服务器端端点
我正在服务器端执行以下代码。
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 未定义。我错过了什么吗?
tutorial you were following is quite outdated, and certainly written for old version of express
. With express
4.0, released in April 2014, (almost) all built-in middleware was dropped,包括将上传的文件解析为req.files
。
这就是问题所在,解决方案是使用单独的模块来处理上传的文件。 Multer
似乎是一个自然的选择(感谢@Ben Fortune 的这个建议)。
首先,安装multer
Node.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
编辑的文件都应该在您的路由处理函数中作为 req.files
可用,格式为 Multer file objects.
我正在使用 dropzone 从 UI 上传文件。这是我的 drozone 配置:
var imageUpload = new Dropzone('div#dataSection', {
url: 'api/image',
autoProcessQueue: true,
paramName: 'file'
});
我正在使用 node 和 expressjs 基于 this link
构建服务器端端点我正在服务器端执行以下代码。
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 未定义。我错过了什么吗?
tutorial you were following is quite outdated, and certainly written for old version of express
. With express
4.0, released in April 2014, (almost) all built-in middleware was dropped,包括将上传的文件解析为req.files
。
这就是问题所在,解决方案是使用单独的模块来处理上传的文件。 Multer
似乎是一个自然的选择(感谢@Ben Fortune 的这个建议)。
首先,安装multer
Node.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
编辑的文件都应该在您的路由处理函数中作为 req.files
可用,格式为 Multer file objects.