gpt4 book ai didi

node.js - aws lambda 如何在 S3 中存储通过 https 检索到的图像

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:26 25 4
gpt4 key购买 nike

我正在尝试编写一个 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);
}
});
});
};

最佳答案

如注释中所示,Lambda 允许将文件保存在 /tmp 中。但你并不真的需要它......

response 不包含文件的内容,而是包含 http 响应(及其状态代码和 header )。

你可以尝试这样的事情:

var AWS = require('aws-sdk');
var https = require('https');
var s3 = new AWS.S3();

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(res) {
var body = '';
res.on('data', function(chunk) {
// Agregates chunks
body += chunk;
});
res.on('end', function() {
// Once you received all chunks, send to S3
var params = {
Bucket: 'example',
Key: 'aws-logo.png',
Body: body
};
s3.putObject(params, function(err, data) {
if (err) {
console.error(err, err.stack);
} else {
console.log(data);
}
});
});
});
};

关于node.js - aws lambda 如何在 S3 中存储通过 https 检索到的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37266269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com