Javascript Multer不接受数组格式的文件会给出';意外的文件错误';
Multer是一个与node js和express一起用于上传文件的模块。我使用的是ng文件上传模块 当我一个接一个地发送多个文件时,它工作正常,没有任何错误,但是当我以数组格式一次性发送所有文件,然后按照Multer的github的建议在服务器端进行必要的更改时,仍然会出现错误 这里是错误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)
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);