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()
});

我遇到了与原始海报相同的问题。我怀疑由于我们将传入缓冲区的编码设置为二进制,因此我们需要对输出流执行相同的操作。经过一番研究,我发现了将编码类型作为参数之外的写入方法。

于 2011-12-07T21:09:55.990 回答
1

您可能喜欢使用 AwsSum,因为它功能齐全且维护良好。它还有一个 examples/ 目录,其中有很多 Amazon S3 示例:

在 node-awssum-scripts 存储库中还有一个您需要的示例,该存储库与 node-awssum 存储库是分开的:

让我知道你是否顺利或需要任何帮助。免责声明:我是 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 回答