【问题标题】:Req.files in undefined at the server side (built with express & node) when sending files using dropzone使用 dropzone 发送文件时,服务器端未定义的 Req.files(使用 express 和节点构建)
【发布时间】:2015-08-28 12:05:07
【问题描述】:

我正在使用 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。我错过了什么吗?

【问题讨论】:

  • 您可能缺少一个文件处理中间件,例如multer
  • @BenFortune:感谢您的快速回复。但是 dropzone 文档并没有谈到任何这样的中间件。您能否提供更多信息。
  • 中间件不是用于 Dropzone,而是用于 Express。

标签: node.js express dropzone.js


【解决方案1】:

您关注的tutorial 已经过时了,而且肯定是为旧版本的express 编写的。 2014年4月发布的express 4.0,(几乎)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-ed 文件都应该在您的路由处理函数中以req.files 的形式提供,格式为Multer file objects

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2020-09-27
    • 1970-01-01
    相关资源
    最近更新 更多