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