Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Multer不接受数组格式的文件会给出';意外的文件错误';_Javascript_Angularjs_Node.js_Express_Multer - Fatal编程技术网

Javascript Multer不接受数组格式的文件会给出';意外的文件错误';

Javascript Multer不接受数组格式的文件会给出';意外的文件错误';,javascript,angularjs,node.js,express,multer,Javascript,Angularjs,Node.js,Express,Multer,Multer是一个与node js和express一起用于上传文件的模块。我使用的是ng文件上传模块 当我一个接一个地发送多个文件时,它工作正常,没有任何错误,但是当我以数组格式一次性发送所有文件,然后按照Multer的github的建议在服务器端进行必要的更改时,仍然会出现错误 这里是错误 Error: Unexpected field at makeError (C:\nodefiles\new\node_modules\multer\lib\make-error.js:12:13)

Multer是一个与node js和express一起用于上传文件的模块。我使用的是ng文件上传模块

当我一个接一个地发送多个文件时,它工作正常,没有任何错误,但是当我以数组格式一次性发送所有文件,然后按照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)
请告诉我我做错了什么。
谷歌搜索并没有那么有用,我已经试过了,也就是为什么我在这里发帖

错误原因是
multer
当前不支持
ng file upload
默认使用的数组语法,即
files[0]
files[1]
files[2]
等。
multer
需要一系列具有相同字段名的文件

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

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

如果有人在上载自定义表单数据对象时遇到类似问题,您可以使用这种方法。在这里,我不使用ngFileUpload

客户端代码
非常感谢@mscdex。我也面临同样的问题。通过以上操作。与arrayKey:“”类似,发生了“path.join的参数必须是字符串”错误,但使用arrayKey:“”(空格b/w引号),会显示相同的错误(即意外的字段错误)。你能帮我解决这个问题吗?因为问题的根本原因是
ng fileupload
通过以数组格式列出多个文件来发送文件,而你也在做同样的事情。不。这解决了这个问题,因为我附加了具有相同密钥的文件。append('fileItems',files[i])。我在我的项目中使用此代码没有任何问题。问题是当您尝试执行类似fd.append('fileItems',files)的操作时;其中文件是一个数组。您确实在添加具有不同字段名的文件,对吗?但无论如何,如果这是工作,那么我不能添加任何超过这一点,我会检查这个解决方案,每当我有空闲时间。干杯
Upload.upload({
  url: '/api/data/addtweet',
  arrayKey: '', // default is '[i]'
  data: {
    files: files
  }
})
var fd = new FormData();

for( var i =0; i< files.length ; i++ ){
    fd.append('fileItems' , files[i] );
}

fd.append('_id', params._id );              
fd.append('user', params.user );              

return $http.post( ROOT_URL + '/uploadFiles/', fd, {
    transformRequest: angular.identity,
    headers: {'Content-Type': undefined }
});
var multer  = require("multer");
var upload = multer({ dest: "uploads/" });

app.post('/api/uploadFiles', upload.array('fileItems'), handlers.files.uploadFiles);