【问题标题】:How to get uploaded file in Node.js Express app using angular-file-upload如何使用 angular-file-upload 在 Node.js Express 应用程序中获取上传的文件
【发布时间】:2014-07-07 21:29:27
【问题描述】:

我想使用 angular-file-upload 上传文件。但是当我尝试访问req.body.filesreq.files 时,我得到了undefined

谁能告诉我如何在 node.js express 应用程序中获取通过 angular-file-upload 上传的文件?

请求负载如下:

Content-Disposition: form-data; name="myFile"; filename="BroadcomLogo.gif"
Content-Type: image/gif

JS代码:

$scope.upload[index] = $upload.upload({
   url : '/upload',
   method: 'POST',
   file: $scope.selectedFiles[index],
   fileFormDataName: 'myFile'
});

节点代码

upload: function(req, res) {
    console.log(req.files);
    res.send("Hello");
},

【问题讨论】:

  • 请提供一些代码示例,尤其是服务器端 node.js 代码
  • 正如我已经提到的 req.files 是未定义的

标签: node.js angularjs express


【解决方案1】:

您需要使用从 Node.js 中的请求解析文件的中间件:

var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.post('/upload', multipartMiddleware,upload);

简单地说,中间件是处理请求的函数。一台服务器 connect.createServer 创建的可以有一堆中间件 与之相关联。当一个请求进来时,它被传递给 第一个中间件函数,以及一个包装的 ServerResponse 对象 和下一个回调。 每个中间件都可以决定通过调用来响应 响应对象上的方法,和/或将请求传递给 通过调用 next() 进入堆栈中的下一层。

http://stephensugden.com/middleware_guide/

在多部分中间件的情况下,它将调用 next() 方法,因此您可以编写自己的函数来响应请求。

当然需要先安装:npm install connect-multiparty

它们是处理分段上传的其他中间件:

你应该使用与 connect 兼容的,因为 express 是建立在 connect 之上的

【讨论】:

  • express.multipart 在 Express 4+ 中消失了
  • express.bodyParser 也是如此。见here
  • 它给我一个错误大多数中间件没有与 express 捆绑
  • 好的,对了,我又更新了。我目前从未使用过 express 4(这似乎很新)
  • 我发现我从某个地方复制的应用程序结构正在使用 json 正文解析器,所以我删除了 json 正文解析器并且它工作了
【解决方案2】:

files 对象中以name 属性为键访问它:

req.files.myFile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 2017-10-20
    • 2015-12-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多