メモリ(バッファ)にファイルがあります。ファイルシステムにはファイルがありません。 そのバッファを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
これをチェックしてください:https://nodejs.org/api/http.html#http_request_end_data_encoding_callback –
@SauliusNext - それではバイナリデータを送信する方法です。しかし、私は2つのことを送信する必要があります - 1つは文字列、もう1つはバイナリです。APIで区別できるように名前を付ける必要があります。 –
興味深い読書:https://github.com/nodejs/node-v0.x-archive/issues/5827 –