Aws lambda 部署后,无服务器I映像上载到S3已损坏,仅本地可用

Aws lambda 部署后,无服务器I映像上载到S3已损坏,仅本地可用,aws-lambda,serverless,image-upload,Aws Lambda,Serverless,Image Upload,我试图将图像上传到S3时使用了serverless和NodeJS,但上传后出现了一些问题。在本地使用serverless-offline时,一切都像champ一样工作,但在部署之后,我遇到了这个错误。然后我尝试拦截并检测发生了什么,并看到了这个结果: 图像正文中出现了一些奇怪的字符,如0x010x04 我还尝试使用无服务器apigw二进制文件,但没有使用运气。自我回答 很幸运,我刚刚找到了解决方案 将此添加到serverless.yml provider: # others apiG

我试图将图像上传到S3时使用了
serverless
和NodeJS,但上传后出现了一些问题。在本地使用
serverless-offline
时,一切都像champ一样工作,但在部署之后,我遇到了这个错误。然后我尝试拦截并检测发生了什么,并看到了这个结果:

图像正文中出现了一些奇怪的字符,如
0x01
0x04


我还尝试使用无服务器apigw二进制文件,但没有使用运气。

自我回答

很幸运,我刚刚找到了解决方案

将此添加到
serverless.yml

provider:
  # others
  apiGateway:
    binaryMediaTypes:
      - '*/*'
无需
无服务器apigw二进制文件

也不需要这个

const binaryMimeTypes = [
  'image/gif',
  'image/png',
  'image/jpeg',
  'image/jpg',
];
...

return serverless.createServer(expressApp, null, binaryMimeTypes)

下面的方法对我有效

若要通过lambda上传文件,一种方法是打开AWS API网关控制台

“API”->{YourAPI}->”设置

在那里你可以找到“二进制媒体类型”部分

添加以下媒体类型:

多部分/表单数据

保存您的更改

然后转到“资源”->“代理方法”(如“任意”)->“方法请求”->“HTTP请求头”,并添加以下头“内容类型”、“接受”

最后部署您的api


有关更多信息,请访问:

您是否在AWS Lambda前使用API网关?如何调用无服务器函数?是的,我使用的是NestJS。类似于
返回serverless.proxy(服务器、事件、上下文)否,我的意思是AWS API网关,如果您正在使用它,则需要允许文件类型@AWS API网关。是的,我正在使用AWS API网关。我刚刚找到解决方案。谢谢@xion