5

以下を使用して、ノードの s3 から画像を取得しようとしています。

app.get('/photos', function(req, res, next) {
var data = '';
s3.get('/tmp/DSC_0904.jpg').on('response', function(s3res){
    console.log(s3res.statusCode);
    console.log(s3res.headers);
    s3res.setEncoding('binary');
    s3res.on('data', function(chunk){
      data += chunk;
    });
    s3res.on('end', function() {
      res.contentType('image/jpeg');
      res.send(data);
    });
  }).end();
});

なぜこれが機能しないのかについての提案をお待ちしています。

4

3 に答える 3

3

終了イベントのコールバックで次の変更を行うことで、画像をダウンロードできました。

s3res.on('end', function() {
    res.contentType('image/jpeg');
    res.write(data, encoding='binary')
    res.end()
});

元のポスターと同じ問題がありました。受信バッファのエンコーディングをバイナリに設定したため、出力ストリームでも同じことを行う必要があると思いました。いくつかの調査の後、パラメータとしてエンコーディング タイプを除外する write メソッドを見つけました。

于 2011-12-07T21:09:55.990 に答える
1

AwsSum は完全に機能し、維持されているため、AwsSum を使用することをお勧めします。また、そこには Amazon S3 のサンプルがロードされている examples/ ディレクトリもあります。

node-awssum リポジトリとは別の node-awssum-scripts リポジトリに必要なものの例もあります。

大丈夫かどうか、または何か助けが必要な場合はお知らせください。免責事項: 私は AwsSum の作成者です。:)

于 2012-05-07T07:11:26.063 に答える
0

これを使用して画像を取得しますが、非常にうまく機能します..

//  Create the new file using fs
var new_file = fs.createWriteStream(destination_file);

//  Now grab the file from s3
aws_connection.getFile(f, function(err, res) {
    if(err) return err;

    res.on('data', function(chunk) {
        new_file.write(chunk);
    });
    res.on('end', function(chunk) {
        new_file.end();
    });
});
于 2013-04-11T08:14:02.837 に答える