3

ドキュメントがそれを省略しているので、これはおそらく非常に基本的です... knoxドキュメントから:

「以下は、s3で押し込んだファイルに対するGETリクエストの例であり、応答ステータスコード、ヘッダー、本文を出力するだけです。」

client.get('/test/Readme.md').on('response', function(res){
  console.log(res.statusCode);
  console.log(res.headers);
  res.setEncoding('utf8');
  res.on('data', function(chunk){
    console.log(chunk);
  });
}).end();

簡単ですが、受信データをローカルファイルとして保存するにはどうすればよいですか?新しいBufferList()か何か?

s3またはcloudfrontから画像をロードし、リクエストに基づいてサイズを返す「オンザフライ」の画像サイズ変更サービスを構築しようとしています。次に、ブラウザは、s3から直接、完全な画像ではなく、サイズ変更された画像をキャッシュします。もちろん、私はこの基本的なビットが最初に機能する必要があります!何か案は?

みんなありがとう!

4

2 に答える 2

2

上記の回答の代わりに、次のように着信ファイルをバッファに保存できます。

var buffer = '';
client.get('/test/Readme.md').on('response', function(res){

  res.setEncoding('utf8');

  res.on('data', function(chunk){
    buffer += chunk;
  });

  res.on('end', function(){
    // do something with the buffer such as save it to file, 
    // or directly resize the image here.
    // eg. save to file:
    fs.writeFile('downloaded_readme.md', buffer, 'utf8', function (err) {
    });
  });

}).end();
于 2011-08-29T20:24:18.723 に答える
2

knox がストリーム API をサポートしていないように見えるため、stream.pipe() を使用して適切な背圧を得ることができません。ただし、ディスクが S3 よりも高速になる可能性があるため、これはおそらく問題にはなりません。

「応答」コールバックで、ファイルシステム モジュールから書き込み可能なストリームを開きますvar outstream = fs.createWriteStream(filename);。「データ」コールバックでoutstream.write(chunk); 、書き込みストリームを閉じるために使用できる「終了」コールバックがあることを願っています。

于 2011-03-03T07:04:22.263 に答える