首页 > 解决方案 > 通过 ElasticBeansStalk 上托管的 API Gateway 在 AWS S3 上上传图像

问题描述

我在 elasticbeanstalk 上部署了一个 REST API,它将图像上传到 s3 存储桶上。

REST API 使用 node.js 编写,前端使用 Reactjs。

当我调用托管在 elasticbeanstalk 上的 REST API 时,它可以将文件上传到 s3。上传后,文件可访问并正确显示。

我还在本地主机上部署了 REST API,并上传了文件。它工作正常。上传的文件正确显示。

或者,我也用 elasticbeanstalk 配置了 API 网关。当我通过 API 网关调用相同的 REST API 并且可以在 s3 上上传文件时。上传后,该文件在存储桶上可用,但不知何故该文件未正确打开。该文件似乎已损坏。这可能是访问策略的问题。

我也有一次在文件上看到这个问题

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>10292CE4C4D62A301</RequestId>
<HostId>XJjQBB3DwB6H0lVkS5cHpj3D9ysTa9tApFaacsklg6MGFEnRwyRWLgnVojM8jY3TpCZ6/NQfMogg=</HostId>
</Error>

这是正确显示的文件。它是通过直接从本地主机或弹性 beanstalk 调用 REST API 上传的。 https://images-for-naradej.s3.amazonaws.com/2021-01-14T23%3A39%3A49.938Z-largebanner.jpg

这是未显示的文件。通过调用连接到 Elastic beanstalk 的 API Gateway 上传。 https://images-for-naradej.s3.amazonaws.com/2021-01-14T23%3A46%3A23.030Z-largebanner.jpg

当我通过 API 网关上传文件时,我不确定为什么文件损坏或访问被拒绝。

有人可以帮我吗?

标签: node.jsamazon-s3amazon-elastic-beanstalkaws-api-gateway

解决方案


通过在 api 网关中添加二进制媒体类型来解决此问题。类型应该是“multipart/form-data”

添加二进制媒体类型


推荐阅读