POST画像を私のNode JSアプリから別のアプリにREST APIを使用しています。Mongoに画像を持っています。 Node JSによって読み込まれ、別のAPIにPOSTされることになっているDB(バイナリ配列データとして)。
私が直面する問題は、画像と一緒にリクエストデータをどのように送信するかです。画像と一緒にPOSTする必要のあるこの未加工データ(JSON形式)があります。
{"data":{"client":"abc","address": "123"},"meta":{"owner": "yourself","Host": "hostishere"}}
「リクエスト」モジュールを使用してこれを行う必要があります。効果がある場合は、「マルチ」を使用できます。しかし、上記のリクエストデータを画像ストリームと一緒に送信するにはどうすればよいですか。以下は私の現在のコードです。それを終えるのを手伝ってくれませんか?
var options = {
Host: 'hostname.com',
port: 80,
path: '/api/content',
method: 'POST',
headers:{
'Content-Type' : 'multipart/form-data'
}
};
var request = http.request(options, function(response) {
var str = '';
var respTime ='';
response.on('data', function (chunk) {
str = str.concat(chunk);
});
response.on('end', () => {
console.log('No more data in response.');
});
setTimeout(function() {
res.send(JSON.stringify(
{
'imageURL': IMG_URL,
'imageId': IMG_ID,
'body': JSON.parse(str)
}
));
}, 1000);
});
request.on('error', (e) => {
console.error('**** problem with request: ', e);
});
request.write(image.IMG_STR); //image.IMG_STR is the binary array representation of the image.
request.end();
更新:2017年6月6日
そのため、私はたまたまエンドポイントを提供するRESTチームに話しかけ、データが次の特定の形式で送信される必要があることを発見しました。以下は、成功したリクエストのスナップショットです。誰かがNode使用すべきコードを教えてくれますか?form-dataパッケージを試しましたが、同じエラーが発生しています
「他のAPI」も制御できる場合は、画像をバイナリデータのbase64表現としてポストボディに含める(およびAPI側でデコードする)ことができます。
2017年6月6日の更新への回答:
スクリーンショットによると、APIにはmultipart/formdataが必要です。 「リクエスト」モジュールを使用したこのようなリクエストは https://github.com/request/request#multipartform-data-multipart-form-uploads に記載されています。
簡単な例(テストされていません):
var formData = {
Data: {data: {client: "abc" ...},
file: fs.createReadStream('testImage_2.jpg'),
};
request.post({url:'<YourUrl>', formData: formData}, function optionalCallback(err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
});
JSONデータを使用してbody
をリクエストに追加すると、それを送信できるはずです。
var options = {
Host: 'hostname.com',
port: 80,
path: '/api/content',
method: 'POST',
headers:{
'Content-Type' : 'multipart/form-data'
},
body: {
"data": {"client":"abc","address": "123"},
"meta":{"owner": "yourself","Host": "hostishere"}
}
};
私が理解していないのは、setTimeout
とres.send
res
変数がどこにも定義されていない場合。