2013-01-03 16 views
18

ストリームである受信HTTP応答を変換し、そのデータを変数に格納します。私はノードストリームについてはあまりよくありません。私はこれを適切に行うために苦労しています。要求モジュールを使用してHTTP応答をバッファリングするにはどうすればよいですか?

var request = require('request'); 

request('http://google.com/doodle.png', function (error, response, body) { 

    // buffer the stream response to and a string variable. 
}) 

UPDATE

この私の完全なコード。私の目標は、画像をリクエストしてmongodbに保存することです。しかし、イメージは常に壊れています。リクエストレスポンスがストリームなので、イメージは部分的にしか保存されていないため、破損していると考えました。

request('http://google.com/doodle.png', function (error, response, body) { 

    image = new Buffer(body, 'binary'); 

    db.images.insert({ filename: 'google.png', imgData: image}, function (err) { 

     // handle errors etc. 

    }); 

}) 

ここまでで、リクエストバッファは、どのようにイメージを正しく破損させずに保存できるかを明確にしました。

答えて

33

リクエストモジュールが応答をバッファリングします。コールバックではbody文字列(またはBuffer)です。

コールバックを提供しない場合は、リクエストからストリームを戻すだけです。 request()Streamを返します。

See the docs for more detail and examples.


要求は、応答がテキストであると仮定し、それは(かかわらず、MIMEタイプの)sringに応答体を変換しようとします。これにより、バイナリデータが破損します。生のバイトを取得する場合は、nullencodingを指定します。

request({url:'http://google.com/doodle.png', encoding:null}, function (error, response, body) { 
    db.images.insert({ filename: 'google.png', imgData: body}, function (err) { 

     // handle errors etc. 

    }); 
}); 
+1

校正いただきありがとうございます。私は私の質問を更新しました。あなたの答えを広げることができるかどうかを見てください。 – jamjam

+0

更新。 – josh3736

+0

うわー。ありがとう、それは働いた。そんなに長い間ナットを運転しています。 – jamjam

0

あなたは、この配管みました?:

request.get('http://google.com/doodle.png').pipe(request.put('{your mongo path}')) 

を(それがこのようなバイナリデータを直接挿入をサポートしているかどうかを知るためにモンゴで十分慣れていないけど、私はCouchDBのとRiakには何を知っています。)

+0

ありがとうございますが、私はパイプを使いたくありません。 mongodbに直接ストリームすることは可能ですが、それは私が避けたいGridfsを使わなければならないことを意味します。 – jamjam

+0

これはHTTP Restですが、ローカルファイルにもパイプすることができます:https://github.com/mikeal/request#streaming – 7zark7

2
var options = { 
    headers: { 
     'Content-Length': contentLength, 
     'Content-Type': 'application/octet-stream' 
    }, 
    url: 'http://localhost:3000/lottery/lt', 
    body: formData, 
    encoding: null, // make response body to Buffer. 
    method: 'POST' 
}; 

nullにエンコードを設定すると、バッファが返されます。

関連する問題