1

Node を使用してファイルを読み取り、マルチパート MIME ポストとして送信しようとしていますが、受信側でファイルが破損しているように見えるという問題があります。

私はファイルを読み、次のように送信する準備をします:

fs.readFile("before.png", function(err,data) {
    // Snip
    content += data.slice(0,data.length);

問題は、何かがストリームをパディングしているように見えることです。下の画像を参照して、before.png ソース ファイルと宛先で受信したファイルを比較してください。EF BF BD のシーケンスは、 .slice() が基になるバイトを提供していないことを示しています。おそらく、何かが UTF-8 エンコーディングに強制されています。

ここに画像の説明を入力

また、toString() を介してバイトを取得しようとしましたが、Bean はありません。アップロードされたファイルにまだ破損が見られます。

 // content += data.toString() // UTF-8 default
 content += data.toString('binary')

デフォルトの toString() もバイナリファイルを UTF-8 に強制しているのではないかと思いますが、「バイナリ」が基礎となるバイトストリームを提供することを期待していたでしょうか?


ブラッドに応じて編集します。連結を試みましたが、オブジェクトを文字列に戻す必要があります。その時点で、UTF-8 文字がストリームに再表示されるようです。

contentToSend = Buffer.concat([ header, data, footer ] );
this.oauth.post( endpoint, accessToken, accessTokenSecret, contentToSend.toString(), contentType, function( x, y, z ) {
4

1 に答える 1

3

私が考えているのは、実際に連結演算子を使用していて、Node.js にUTF-8 のデフォルト エンコーディングの文字列として扱わcontentせていることです。data代わりにこれを試してください:

content = Buffer.concat(content, data);

また、データ全体のスライスを取得する理由はありません。受信バッファー全体をそのまま使用できます。

于 2013-07-28T15:59:33.763 に答える