【发布时间】:2016-09-12 23:19:40
【问题描述】:
我正在尝试编写一个 lambda 脚本,该脚本可以从站点中提取图像并将其存储在 S3 中。我遇到的问题是将什么样的对象作为 Body 属性传递给S3.putObject 方法。在文档here 中说它应该是new Buffer('...') || 'STRING_VALUE' || streamObject,但我不确定如何将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);
}
});
});
};
【问题讨论】:
-
如果我没记错的话,在该示例中,脚本似乎在本地计算机上运行,他们使用 curl 将文件保存到磁盘,然后使用该保存文件的路径。由于我在 lambda 我无法将文件保存到磁盘
-
“由于我使用 lambda,我无法将文件保存到磁盘”。这是不正确的。您在 Lambda 上有可用的磁盘空间来临时存储文件。
标签: node.js amazon-s3 aws-sdk aws-lambda