我正在使用connect-busboy在node / express app中上传文件。问题有时是有效的(文件上传得非常好),有时我得到错误Unexpected end of multipart data
并且应用程序崩溃。可能是什么原因这个错误?此外,任何有关如何调试此功能的帮助将不胜感激。我正在使用node version 5
和connect-busboy": "0.2.14"
提前谢谢
router.route('/images')
.post (function(req, res) {
var fstream;
req.busboy.on('file', function (fieldname, file, filename) {
fstream = fs.createWriteStream(__dirname + '/public/img/'+ filename);
file.pipe(fstream);
file.on('end', function() {
console.log('File [' + fieldname + '] Finished sucessfully');
});
fstream.on('error',function(err){
console.log('fstream error' + err);
file.unpipe();
});
fstream.on('close', function () {
res.status(200);
res.json({ message: 'File uploaded' });
});
});
req.pipe(req.busboy);
});
这是我得到的错误
throw er; // Unhandled 'error' event
: Error: Unexpected end of multipart data
2017-05-07T20:28:27.599826+00:00 app[web.1]: at
/app/node_modules/busboy/node_modules/dicer/lib/Dicer.js:62:28
答案 0 :(得分:0)
对我来说,在客户端格式化我的帖子正文时,使用\n
换行符而不是\r\n
换行符会收到此错误。
当我固定换行符时(如下面的代码所示),它起作用了。
fetch('/api/upload',
{ method: 'POST',
credentials: 'include',
headers: {'Content-type': 'multipart/form-data; boundary=XXX' },
body: '--XXX\r\nContent-Disposition: form-data; name="file"; filename="filename.csv"\r\nContent-Type: text/csv\r\n\r\nA,B,C\r\n1,1.1,name1\r\n2,2.2,name2\r\n\r\n--XXX--'
});
答案 1 :(得分:0)
这是与Firebase工具相关的错误。今天,我在使用busboy软件包时遇到了这个问题,修复这个问题花了2个小时。我们只需要升级firebase工具即可解决此问题。
情况1:如果您已将Firebase工具安装为软件包依赖项,请在以下代码下运行
npm i firebase-tools
案例2:如果您已将Firebase工具安装为全局依赖项,请运行以下代码
npm i -g firebase-tools
firebase工具的工作版本:
我希望这会有所帮助,有关更多信息,请查看此问题link。
答案 2 :(得分:0)
如果还有其他人对此有疑问,那么我的问题就在前端。使用Swift时,如果使用默认的URLSession配置,似乎会出现问题。我将其更改为:
let session = URLSession(configuration: .default, delegate: self, delegateQueue: nil)
到以下:
let sessionConfig = URLSessionConfiguration.background(withIdentifier: "it.yourapp.upload")
sessionConfig.isDiscretionary = false
sessionConfig.networkServiceType = .default
let session = URLSession(configuration: sessionConfig, delegate: self, delegateQueue: OperationQueue.main)
现在效果很好!
答案 3 :(得分:0)
您可能会遗漏最终边界的短划线('-')。
https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html
示例:
Content-Type: multipart/alternative; boundary=boundary42
--boundary42
Content-Type: text/plain; charset=us-ascii
...plain text version of message goes here....
--boundary42
Content-Type: text/richtext
.... richtext version of same message goes here ...
--boundary42
Content-Type: text/x-whatever
.... fanciest formatted version of same message goes here
...
--boundary42--