2011-07-30 7 views
9

Node.jsへの簡単なXHRアップロード(Formidable経由)を実装しようとしています。私は何も起こらないだけでランダムな文字列に境界を設定した場合Node.js - XHRを使用したフォローアップアップロード

Error: bad content-type header, no multipart boundary 

:。問題は、私は

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

を設定した場合、ノードは私にエラーを与えることですブラウザはPOSTでハングアップし、サーバーの応答を待ちます。

重要なのは、私が通常の同期POSTですべてをうまく動作させるということです。

誰でもXHRアップロードでFormidableを使用しようとしましたか?

答えて

13

私はそれを理解しました。私はクライアント側で小さなバグを作った。ここで

は強敵

とXHRアップロードの作業expampleありますは、任意の境界や特別なヘッダーを設定するは必要ありません。私はそれが強敵を使って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); 
    } 
    }); 
}); 
+0

「コンテンツタイプのヘッダーが正しくない、コンテンツタイプがありません」というエラーが表示されます。これを丸める方法は本当にわかりませんか? – wilsonpage

+0

@pagewil

タグにenctype = "multipart/form-data"を設定してみてください – Pono

+0

実際に問題を解決したクライアント側の問題を共有できますか? – Alexander

2

Formidableでいくつかのことを試みましたが、XHRアップロードを受け入れることができませんでした。エクスプレスを使ったファイルアップロードのために私がやったことがここにあります。

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); 
    }); 

これが役に立ちます。

+1

。 – Tareq

関連する問題