Node.js – 使用XHR强大的上传

我尝试实现一个简单的XHR上传到Node.js(通过Formidable )。 问题是,如果我设置

xhr.setRequestHeader("Content-Type", "multipart/form-data"); 

节点给我错误:

 Error: bad content-type header, no multipart boundary 

如果我将边界设置为随机string,则不会发生任何事情 浏览器挂在POST上并等待服务器响应。

重点是,如果我使用强大的常规同步POST一切工作正常。

任何人都试图用XHR上传使用Formidable ?

我想到了。 我在客户端做了一个小错误。

这里是使用Formidable进行XHR上传工作示例

不需要设置任何边界或特殊标题。

客户

 var formData = new FormData(); var xhr = new XMLHttpRequest(); var onProgress = function(e) { if (e.lengthComputable) { var percentComplete = (e.loaded/e.total)*100; } }; var onReady = function(e) { // ready state }; var onError = function(err) { // something went wrong with upload }; formData.append('files', file); xhr.open('post', '/up', true); xhr.addEventListener('error', onError, false); xhr.addEventListener('progress', onProgress, false); xhr.send(formData); xhr.addEventListener('readystatechange', onReady, false); 

服务器

 app.post('/up', function(req, res) { var form = new formidable.IncomingForm(); form.uploadDir = __dirname + '/tmp'; form.encoding = 'binary'; form.addListener('file', function(name, file) { // do something with uploaded file }); form.addListener('end', function() { res.end(); }); form.parse(req, function(err, fields, files) { if (err) { console.log(err); } }); }); 

我用Formidable尝试了几个不同的东西,从来没有能够接受XHR上传。 这是我最终做的使用express的file upload。

 app.post('/upload', function (req,res){ if(req.xhr){ var fSize = req.header('x-file-size'), fType = req.header('x-file-type'), basename = require('path').basename, fName = basename(req.header('x-file-name')), ws = fs.createWriteStream('./temp/'+fName); req.on('data', function(data) { ws.write(data); }); 

希望这可以帮助。