Multer not accepting files in array format gives 'Unexpected File Error'
The reason for the error is that multer
currently does not support the array syntax that ng-file-upload
uses by default which is files[0]
, files[1]
, files[2]
, etc. multer
is expecting a series of files with the same field name.
The easiest solution is to set ng-file-upload
's arrayKey
option like so to avoid appending the [index]
part:
Upload.upload({ url: '/api/data/addtweet', arrayKey: '', // default is '[i]' data: { files: files }})
If someone is facing a similar issue when uploading a custom form data object, you can use this approach. In here I am not using ngFileUpload.
Client Side code
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 }});
Express Router
var multer = require("multer");var upload = multer({ dest: "uploads/" });app.post('/api/uploadFiles', upload.array('fileItems'), handlers.files.uploadFiles);