2016-05-27 9 views
1

OpenShiftのファイルシステムにJPGバイナリの本体データを保存します。しかし、何とか受信した情報は変換されます。理由は何ですか? node.jsがデータをテキストとして扱い、それをエンコード/デコードすることは可能でしょうか?node.jsがPOST本体を変換するのはなぜですか?

var myServer = http.createServer(function(request, response) 
{ 
    var data = ''; 

    request.on('data', function (chunk){ 
     data += chunk; 
    }); 

    request.on('end',function(){ 

    var date = new Date(); 
    var url_parts = url.parse(request.url,true); 

    if(url_parts.pathname == '/setImage') { 

     if(data != null && data.length > 0) { 

      fs.writeFile('/var/lib/openshift/555dd1415973ca1660000085/app-root/data/asset/' + url_parts.query.filename, data, 'binary', function(err) { 
       if (err) throw err 
       console.log(date + ' File saved. ' + url_parts.query.filename + ' ' + data.length) 

       response.writeHead(200) 
       response.end() 
      }) 
     } 
    } 

enter image description here

答えて

5

あなたはそう(文字符号化の対象としている)だけでなく、文字列にチャンクを変換します、それに+=chunk年代を追加し、文字列でdataを初期化しています。

代わりに、あなたはBuffer年代の配列としてチャンクを収集し、最終的なバッファを作成するためにBuffer.concat()を使用する必要があります。

var chunks = []; 

request.on('data', function (chunk){ 
    chunks.push(chunk); 
}); 

request.on('end', function() { 
    var data = Buffer.concat(chunks); 
    ... 
}); 
+0

は私の命を救った、私は日以来、それに苦しんでいました。ありがとう! –

関連する問題