Node.js knox s3 поиск изображений

Я пытаюсь получить изображение из 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();
});

Я открыт для предложений относительно того, почему это не работает.

3 ответа

Решение

Я смог загрузить изображение, внеся следующие изменения в обратный вызов конечного события:

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

У меня были те же проблемы, что и у оригинального постера. Я подозревал, что, поскольку мы установили кодировку во входящем буфере в двоичную форму, нам нужно было сделать то же самое в выходном потоке. После некоторых исследований я нашел метод записи, который исключает тип кодирования в качестве параметра.

Вы можете использовать AwsSum, так как он полностью поддерживается и поддерживается. Там также есть каталог examples/, в котором есть множество примеров Amazon S3:

Также есть пример того, что вам нужно в репозитории node-awssum-scripts, который отделен от репозитория node-awssum:

Дайте мне знать, если у вас все в порядке или вам нужна помощь. Отказ от ответственности: я автор AwsSum.:)

Я использую это, чтобы получить мои изображения, и это работает довольно хорошо..

//  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();
    });
});
Другие вопросы по тегам