Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image S3中的JEPG多部分表单数据始终损坏_Image_Amazon Web Services_Amazon S3_Aws Lambda_Multipartform Data - Fatal编程技术网

Image S3中的JEPG多部分表单数据始终损坏

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对象,但当我下载并读取该对象(通过控制台)时,它总是被破坏,有时比输入对象小,并且无法打开 我认为损坏与多部分/表单数据以及可能添加到文件中/对文件进行编码有关,

重复问题解释: 这个问题不是重复的,因为我试图通过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。