2017-05-11 17 views
1

メモリ(バッファ)にファイルがあります。ファイルシステムにはファイルがありません。 そのバッファをHTTPを話す別のサーバーに送信したいとします。HTTPリクエストでバッファを送信するにはどうすればよいですか?

たとえば、一部のAPI Aは、ファイルをメモリに作成し、SignServerはそのようなファイルを操作し、新しいバッファで応答します。私のAPIはからのファイルを取り出し、それをSignServerに送ります。

SignServerに複数の方法でファイルを送信しようとしましたが、ステータス400(要求にフィールド 'データ'がありません)で応答し続けます。

私が試した何

var http = require('http'); 
var querystring = require('querystring'); 

var data = querystring.stringify({ 
    workerName: 'PDFSigner', 
    data: file_buffer 
}); 

var request = new http.ClientRequest({ 
    hostname: 'localhost', 
    port: 8080, 
    path: '/signserver/process', 
    method: 'GET', 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded', 
     // I also tried 'multipart/form-data' 
     'Content-Length': Buffer.byteLength(data) 
    } 
}); 

request.end(data); 

私はdataを印刷してみました、それがあった:

workerName = PDFSigner &データ=理由data悪いです

01に設定されていない。 file_bufferを印刷しようとしましたが、内容がありません(nullではなく、未定義で、実際に内部にバイトがあります)。 そのため、バッファを文字列にすると空の文字列が返されました。

requestモジュールで同じことをやってみたところ、うまくいかなかった。

SignServerはノードでもJavaScriptでも書かれていないことに注意してください。これはJavaアプリケーションなので、おそらくjsonではうまくいきません(これが私がquerystringでそれをしようとしている理由です)。はい、私はjsonを送ろうとしました。

data
+0

これをチェックしてください:https://nodejs.org/api/http.html#http_request_end_data_encoding_callback –

+0

@SauliusNext - それではバイナリデータを送信する方法です。しかし、私は2つのことを送信する必要があります - 1つは文字列、もう1つはバイナリです。APIで区別できるように名前を付ける必要があります。 –

+0

興味深い読書:https://github.com/nodejs/node-v0.x-archive/issues/5827 –

答えて

1

this issueに記載され、溶液をthis issueに与えられて、空の文字列に設定されている理由。

エスケープなどのようなバッファを文字列化:言及@robertklepとして

var data = querystring.stringify({ 
    workerName: 'PDFSigner', 
    data: escape(file_buffer).toString('binary') 
}); 

、あなたの他の問題は、あなたがapplication/x-www-form-urlencodedを使用して大きなファイルを送信できないことです。あなたはmultipart/form-dataでそれをする必要があります。

関連する問題