我在AWS中有一个Lambda函数,该函数与POST方法相关,该函数基本上获取图像URL并将图像上传到S3存储桶。
我的Lambda函数如下所示:
var s3 = new AWS.S3();
exports.handler = (event, context, callback) => {
let encodedImage = JSON.parse(event.body).user_avatar;
let decodedImage = Buffer.from(encodedImage, 'base64');
var filePath = "avatars/" + event.queryStringParameters.username + ".jpg"
var params = {
"Body": decodedImage,
"Bucket": "MYBUCKETNAME.com",
"Key": filePath
};
s3.upload(params, function (err, data) {
if (err) {
callback(err, null);
} else {
let response = {
"statusCode": 200,
"headers": {
"my_header": "my_value"
},
"body": JSON.stringify(data),
"isBase64Encoded": false
};
callback(null, response);
}
});
};
似乎将图像上传到指定的存储桶,但是当我查看图像时,它似乎已损坏。
对于AWS提供的GUI之外的任何内容,我都没有经验。如果有人对可能发生的事情有任何想法,我将不胜感激。预先感谢!
答案 0 :(得分:1)
上载图像文件时,还应指定内容类型。对于jpeg,它是image/jpeg
。对于png为image/png
。如果您忽略内容类型,则图像可能根本不会显示(只有黑色空间)。
有一些node.js库可以为您确定图像类型。这只是许多此类库之一:
var params = {
Body: decodedImage,
Bucket: "MYBUCKETNAME.com",
Key: filePath,
Content-Type: 'image/jpeg'
};
答案 1 :(得分:0)
对于那些仍在处理类似问题的人。还请考虑一下,如果您在上传后读取文件,然后发送相同的文件而不将光标重置为0,则会损坏文件,因为S3将从光标所在的位置开始读取。就我而言,我正在阅读以找出图像的内容。
因此,如果您在调用upload_fileobj
之前重置了游标,它将对其进行修复:
try:
file.seek(0) //resets the cursor.
s3_client.upload_fileobj(
file,
bucket_name,