通过 API Gateway AWS 服务代理上传到 S3 存储桶

csi*_*ilk 5 amazon-s3 amazon-web-services aws-api-gateway

正如标题一样,我似乎无法让它工作,我正在遵循此处详述的高级指南但上传的任何图像似乎都是空白的。

我设置了什么:

/images/{object} - PUT
 > Integration Request
   AWS Region: ap-southeast-2
   AWS Service: S3
   AWS Subdomain [bucket name here]
   HTTP method: PUT
   Path override: /{object}
   Execution Role [I have one set up]
 > URL Path Paramaters
   object -> method.request.path.object
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 Postman 发送带有 Content-Type: image/png 的 PUT 请求,并且正文是 png 文件的二进制上传。

我也试过使用 curl:

curl -X PUT -H "Authorization: Bearer [token]" -H "Content-Type: image/gif" --upload-file ~/Pictures/bart.gif https://[api-url]/dev/images/cool.gif
Run Code Online (Sandbox Code Playgroud)

它在服务器上创建文件,大小似乎是上传的两倍,查看时我只是得到“图像有错误”。

当我尝试使用 .txt 文件(内容类型:文本/纯文本)时,它似乎可以工作。

有任何想法吗?

csi*_*ilk 2

在阅读了大量内容并与 AWS 技术支持人员交谈后,问题似乎是您无法通过 API Gateway 进行二进制上传,因为任何通过的内容都会自动经过 UTF-8 编码。

我能想到一些解决方法,我的解决方案是在上传之前对文件进行 Base64 处理,并在文件到达存储桶时触发 lambda 对其进行解码