【发布时间】:2021-03-15 13:50:29
【问题描述】:
我在将文件从邮递员上传到 aws lambda + s3 时遇到问题。如果我理解正确,图像必须是 base64 字符串并通过 JSON 发送以使用 lambda 和 API Gateway,因此我将图像转换为 base64,并在邮递员中使用 base64 字符串
文件上传到 S3,但是当我下载 s3 对象并打开它时,我得到了
所以我认为我上传的不正确。我使用了 base64 到图像转换器并且图像出现了,所以 base64 字符串在通过邮递员发送之前是正确的,所以我的设置中的某些东西是关闭的。我究竟做错了什么?感谢您的帮助!
上传.js
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
exports.handler = async (event, context, callback) => {
let data = JSON.parse(event.body);
let file = data.base64String;
const s3Bucket = "upload-test3000";
const objectName = "helloworld.jpg";
const objectData = data.base64String;
const objectType = "image/jpg";
try {
const params = {
Bucket: s3Bucket,
Key: objectName,
Body: objectData,
ContentType: objectType
};
const result = await s3.putObject(params).promise();
return sendRes(200, `File uploaded successfully at https:/` + s3Bucket + `.s3.amazonaws.com/` + objectName);
} catch (error) {
return sendRes(404, error);
}
};
const sendRes = (status, body) => {
var response = {
statusCode: status,
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token",
"Access-Control-Allow-Methods": "OPTIONS,POST,PUT",
"Access-Control-Allow-Credentials": true,
"Access-Control-Allow-Origin": "*",
"X-Requested-With": "*"
},
body: body
};
return response;
};
.png
【问题讨论】:
-
你能在 gist 或 pastebin 中发布 base64 编码的字符串吗?所以我们可以仔细检查它是否有效。
-
这是我使用的base64字符串pastebin.com/b2A55Lh3
-
不幸的是,它说粘贴不再可用:(
-
是的,pastebin 正在删除它。这是一个不同的来源:0bin.net/paste/z0zslIdN#E9XxfpS-KlQaVRmPbLx2ZIz2nQH/…
-
在调用
s3.putObject之前将您的 base64 字符串解码回 jpeg。然后写入 S3 的对象将是一个有效的二进制 jpg 文件,而不是包含 jpg 的 base64 字符串。如果你从 s3 下载helloworld.jpg我假设它的 base64 文本不是二进制的?
标签: node.js amazon-web-services amazon-s3 aws-lambda aws-api-gateway