2016-09-07 3 views
-1

node.jsにcURLコマンドをコピーしようとしています。コマンドは次のとおりです。node.jsに関してcURL '-F' paramとは何か

curl https://search.craftar.net/v1/search -F "token=xxx" -F "[email protected]" 

これは問題ありませんが、これはnode.jsにどのように変換されますか?リクエストライブラリを使用して:

request({ 
    url: 'https://search.craftar.net/v1/search', 
    method: 'POST', 
    form: {token: 'xxx', image: binaryBodyOfPrevRequest}, 
    headers: {'Content-Type': 'multipart/form-data'} 
}, function(err, res, body) { 
    console.log(body) // prints out: {"error": {"message": "Reference image is required", "code": "IMAGE_MISSING"}} 
}); 

私のトークンは認識されているようですが、画像はありません。何故ですか?

私はFacebook API - What is " curl -F "?を見ました。それはフォームであることがわかります。しかし、私は、HTMLフォームとマルチパート/フォームデータのアイデアをどうやって比較するのか、フォームがデータ送信に関してどのようなものかを知りません。

答えて

1

コンテンツタイプを手動で設定し、formを使用する代わりに、request()オプションでformの代わりにformDataを使用してください。これにより、application/x-www-form-urlencodedリクエストの代わりにmultipart/form-dataリクエストが送信されます。 multipart/form-dataを使用する必要があるのは、一般的に、生のバイナリデータを転送するために使用されるリクエストタイプです。

さらに、画像がローカルの場合(または他の種類のストリームから画像を取得できる場合)は、リテラルの内容ではなくファイルにストリームを渡すことができます。これは、ファイル全体を最初にバッファリングする必要がないため、メモリ使用量に役立ちます。例:

formData: { 
    token: 'foo', 
    image: fs.createReadStream('/path/to/image.jpg') 
} 
+0

こんにちは、返信ありがとうございます。正確な使用例は、私がCouchDBから画像を取得してから送信することです。だから、私はバイナリデータとして 'body'にファイルを持っています。それをやり直すのではなく、代わりにファイルにパイプするのがよいと言っていますか?どの時点でfs.createReadStreamを使用してコンテンツを取得できますか? –

+0

私は、いくつかのcouchdbドライバがストリーミング添付ファイルをサポートしていると信じています(例:['cradle'](https://github.com/flatiron/cradle#streaming-2))。また、添付ファイルを直接ダウンロードするには、[/{db}/{docid}/{attachmentName}](http://docs.couchdb.org/en/stable/api/document/attachments.html)のHTTP要求を直接行うこともできます#get-db-docid-attname)、 'image'値にHTTPレスポンスストリームを使用します。 – mscdex

+0

もう一度ありがとうございます。 "またはあなたが他の種類のストリームを介して画像を取得できるかどうか"。私はすでに/ {db}/{docid}/{attName}にリクエストを行い、レスポンス本体にバイナリストリームによる添付を受け取りました。 "var request = require( 'request').defaults({encoding:null});"を使用すると、コンテンツタイプがimage/jpegの添付ファイルとして本文をCouchDBに直接送り返すことができました。しかし、私はそれがフォームを必要とするので、同じ身体を職人に送ることができませんでした。リクエストのリターン本体からストリームを作成するにはどうすればよいですか? –

関連する問題