Я пытаюсь написать сценарий лямбды, который может вытащить изображение с сайта и сохранить его на S3. Проблема, с которой я сталкиваюсь, - это какой объект передать в качестве атрибута Body в метод S3.putObject
. В документации here говорится, что она должна быть либо new Buffer('...') || 'STRING_VALUE' || streamObject
, но я не уверен, как преобразовать ответ https в один из них. Вот то, что я пробовал:aws lambda Как сохранить изображение, полученное через https в S3
var AWS = require('aws-sdk');
var https = require('https');
var Readable = require('stream').Readable;
var s3 = new AWS.S3();
var fs = require('fs');
var url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/1/1d/AmazonWebservices_Logo.svg/500px-AmazonWebservices_Logo.svg.png';
exports.handler = function(event, context) {
https.get(url, function(response) {
var params = {
Bucket: 'example',
Key: 'aws-logo.png',
Body: response // fs.createReadStream(response); doesn't work, arg should be a path to a file...
// just putting response errors out with "Cannot determine length of [object Object]"
};
s3.putObject(params, function(err, data) {
if (err) {
console.error(err, err.stack);
} else {
console.log(data);
}
});
});
};
Пожалуйста, обратитесь к http://stackoverflow.com/questions/19016130/pushing-binary-data-to -amazon-s3-using-node-js – Shibashis
Если я не ошибаюсь, похоже, что в этом примере скрипт запускается на локальной машине, они используют curl для сохранения файла на диск, а затем создают поток с указанием пути к этому сохраненному файлу. Поскольку я на лямбде, я не могу сохранить файл на диск – kleaver
«Так как я на лямбде, я не могу сохранить файл на диск». Это неправильно. У вас есть свободное место на Lambda для временного хранения файлов. –