Image S3中的JEPG多部分表单数据始终损坏
重复问题解释: 这个问题不是重复的,因为我试图通过lambda函数提交图像,而不是直接提交到S3。我必须通过lambda来验证用户和权限,并进行DB调用以确定数据应该存储在哪里,并更新数据位置上的DB 我试图使用Lambda将一个二进制图像放入S3。该映像被发布到API网关端点,并被代理到lambda函数。该函数成功地将数据放入一个S3对象,但当我下载并读取该对象(通过控制台)时,它总是被破坏,有时比输入对象小,并且无法打开 我认为损坏与Image S3中的JEPG多部分表单数据始终损坏,image,amazon-web-services,amazon-s3,aws-lambda,multipartform-data,Image,Amazon Web Services,Amazon S3,Aws Lambda,Multipartform Data,重复问题解释: 这个问题不是重复的,因为我试图通过lambda函数提交图像,而不是直接提交到S3。我必须通过lambda来验证用户和权限,并进行DB调用以确定数据应该存储在哪里,并更新数据位置上的DB 我试图使用Lambda将一个二进制图像放入S3。该映像被发布到API网关端点,并被代理到lambda函数。该函数成功地将数据放入一个S3对象,但当我下载并读取该对象(通过控制台)时,它总是被破坏,有时比输入对象小,并且无法打开 我认为损坏与多部分/表单数据以及可能添加到文件中/对文件进行编码有关,
多部分/表单数据
以及可能添加到文件中/对文件进行编码有关,但我无法准确地找出如何直接提取图像数据
如何正确地将多部分/表单数据图像放入S3
将本机代码发送到lambda
const body = new FormData();
body.append('photo', {
uri: image.image,
name: image.name,
type: image.type,
});
fetch('https://ov2eat1o5h.execute-api.us-east-1.amazonaws.com/dev/uploadImage', {
method: 'POST',
headers: {
Authorization: token,
'Content-Type': 'multipart/form-data',
},
body,
})
.then(response => response.json())
.then(responseJson => {
console.log(responseJson);
})
.catch(error => {
console.error(error);
});
Lambda代码:
const AWS = require('aws-sdk');
exports.handler = async event => {
const s3 = new AWS.S3();
const params = {
Body: event.body,
Bucket: 'projectr.app',
Key: 'exampleobject.jpg',
};
const response = await s3.putObject(params).promise();
console.log(response);
};
其他尝试过的东西:
const AWS = require('aws-sdk');
exports.handler = async event => {
const s3 = new AWS.S3();
const params = {
Body: event.body,
Bucket: 'projectr.app',
Key: 'exampleobject.jpg',
};
const response = await s3.putObject(params).promise();
console.log(response);
};
parse multipart:始终返回空数组
const boundary = event.headers['content-type'].slice(20);
let {body} = event;
if (event.isBase64Encoded) {
body = Buffer.from(event.body, 'base64');
}
const parts = multipart.Parse(body, boundary);
for (let i = 0; i < parts.length; i++) {
const part = parts[i];
console.log(`PART ${i}: ${part}`);
}
解释编辑成问题的差异的@AnonCoward解释可能重复。重复问题中的答案不能用于解析多部分上传有什么原因吗?@AnonCoward是的,答案中没有任何代码。当没有任何代码时,我应该如何从中复制代码???只是开玩笑。让我试一下,看看我是否能让它工作。在你的putObject调用中,你应该提供一个适当的ContentType。解释编辑成问题的差异的@AnonCoward解释可能重复。有没有原因不能使用重复问题中的答案来解析多部分上载?@AnonCoward是的,答案中没有任何代码。当没有任何代码时,我应该如何从中复制代码???只是开玩笑。让我尝试一下,看看我是否能让它工作。在putObject调用中,您应该提供适当的ContentType。