javascript - Multer 不接受数组格式的文件给出 'Unexpected File Error'

标签 javascript angularjs node.js express multer

Multer 是一个与 node js 和 express 一起使用的模块,用于上传文件。我在 Angular 端使用 ng-file 上传模块。

当我一个接一个地发送多个文件时,它工作得很好,没有任何错误,但是当我以数组格式一次性发送所有文件,然后我按照 Multer 的 github 的建议在服务器端进行必要的更改时,仍然出现错误。

这是错误

Error: Unexpected field
    at makeError (C:\nodefiles\new\node_modules\multer\lib\make-error.js:12:13)
    at wrappedFileFilter (C:\nodefiles\new\node_modules\multer\index.js:39:19)
    at Busboy.<anonymous> (C:\nodefiles\new\node_modules\multer\lib\make-middleware.js:109:7)
    at Busboy.emit (events.js:118:17)
    at Busboy.emit (C:\nodefiles\new\node_modules\multer\node_modules\busboy\lib\main.js:31:35)
    at PartStream.<anonymous> (C:\nodefiles\new\node_modules\multer\node_modules\busboy\lib\types\multipart.js:209:13)
    at PartStream.emit (events.js:107:17)
    at HeaderParser.<anonymous> (C:\nodefiles\new\node_modules\multer\node_modules\busboy\node_modules\dicer\lib\Dicer.js:51:16)
    at HeaderParser.emit (events.js:107:17)
    at HeaderParser._finish (C:\nodefiles\new\node_modules\multer\node_modules\busboy\node_modules\dicer\lib\HeaderParser.js:70:8)
    at SBMH.<anonymous> (C:\nodefiles\new\node_modules\multer\node_modules\busboy\node_modules\dicer\lib\HeaderParser.js:42:12)
    at SBMH.emit (events.js:118:17)
    at SBMH._sbmh_feed (C:\nodefiles\new\node_modules\multer\node_modules\busboy\node_modules\dicer\node_modules\streamsearch\lib\sbmh.js:159:14)
    at SBMH.push (C:\nodefiles\new\node_modules\multer\node_modules\busboy\node_modules\dicer\node_modules\streamsearch\lib\sbmh.js:56:14)
    at HeaderParser.push (C:\nodefiles\new\node_modules\multer\node_modules\busboy\node_modules\dicer\lib\HeaderParser.js:48:19)
    at Dicer._oninfo (C:\nodefiles\new\node_modules\multer\node_modules\busboy\node_modules\dicer\lib\Dicer.js:198:25)

示例 Controller 代码

var app = angular.module('fileUpload', ['ngFileUpload']);

app.controller('MyCtrl', ['$scope', 'Upload', '$timeout', function ($scope, Upload, $timeout) {
    $scope.uploadFiles = function (files) {
        $scope.files = files;
        if (files && files.length) {
            console.log(files);
            Upload.upload({
                url: '/api/data/addtweet',
                data: {
                    files: files
                }
            }).then(function (response) {
                $timeout(function () {
                    $scope.result = response.data;
                });
            }, function (response) {
                if (response.status > 0) {
                    $scope.errorMsg = response.status + ': ' + response.data;
                }
            }, function (evt) {
                $scope.progress =
                    Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
            });
        }
    };
}]);

请告诉我我做错了什么。 谷歌搜索没有那么有用,我已经尝试过了,这就是我在这里发帖的原因。

最佳答案

错误原因是multer目前不支持ng-file-upload默认使用的数组语法files[0] files[1]files[2] 等。multer 期待一系列带有 的文件相同的字段名称

最简单的解决方案是像这样设置 ng-file-uploadarrayKey 选项以避免附加 [index] 部分:

Upload.upload({
  url: '/api/data/addtweet',
  arrayKey: '', // default is '[i]'
  data: {
    files: files
  }
})

关于javascript - Multer 不接受数组格式的文件给出 'Unexpected File Error',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32917617/

相关文章:

javascript - 如何以编程方式访问 NodeJS 异常文本

javascript - 如何同时使用 Require.js 和 Buster.js?

node.js - 无法访问本地主机 :3000/

node.js - 作为不同的用户在 su 中永远运行

javascript - Angularjs:如何在重新加载后保留复选框值

node.js - 作为 Windows 服务运行时,wkhtmltopdf 作为 Node 模块失败

javascript - Formik - 在错误消息中使用大写首字母字段名称

javascript - 比较两个日期时出现意外结果

javascript - 将 Ajax 数据获取到 Angular 网格中

javascript - Foundation Button Groups plain html 和 ng-repeat 不同的结果