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 的这个建议)。

首先,安装multerNode.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.