我正在嘗試編寫一個lambda腳本,可以從站點中提取圖像並將其存儲在S3中。我遇到的問題是將什麼樣的對象作爲Body屬性傳遞給S3.putObject
方法。在文檔here它說它應該是new Buffer('...') || 'STRING_VALUE' || streamObject
,但我不知道如何將https響應轉換爲其中之一。以下是我試過的:aws lambda如何在S3中存儲通過https檢索的圖像
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將文件保存到磁盤,然後創建一個流與該保存的文件的路徑。由於我在lambda上,我無法將文件保存到磁盤 – kleaver
「由於我在lambda上,我無法將文件保存到磁盤」。這是不正確的。您可以在Lambda上使用磁盤空間臨時存儲文件。 –