无服务器我将图像上传到 S3 在部署后损坏,仅本地工作

Bin*_* Ho 7 image-upload aws-lambda serverless

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

图像主体中出现了一些奇怪的字符,例如<0x0a> 0x01 0x04

在此输入图像描述

我也尝试过使用serverless-apigw-binary,但运气不好。

Bin*_* Ho 8

自我回答

很幸运我刚刚在binary-media-types找到了解决方案

将其添加到serverless.yml.

provider:
  # others
  apiGateway:
    binaryMediaTypes:
      - '*/*'
Run Code Online (Sandbox Code Playgroud)

不需要serverless-apigw-binary

也不需要这个

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

return serverless.createServer(expressApp, null, binaryMimeTypes)
Run Code Online (Sandbox Code Playgroud)


var*_*d11 6

以下方法对我有用。

如果想通过 lambda 上传文件,一种方法是打开 AWS API Gateway 控制台。

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

在那里您将找到“二进制媒体类型”部分。

添加以下媒体类型:

多部分/表单数据

保存您的更改。

然后转到“资源”->“代理方法”(例如“ANY”)->“方法请求”->“HTTP 请求标头”并添加以下标头“Content-Type”、“Accept”。

最后部署你的 api。

有关更多信息,请访问:https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-configure-with-console.html