【问题标题】:Upload to S3 bucket through API Gateway AWS Service Proxy通过 API Gateway AWS 服务代理上传到 S3 存储桶
【发布时间】:2018-02-08 09:41:51
【问题描述】:

如标题所示,我似乎无法使用它,我正在遵循详细的高级指南 here 但上传的任何图像似乎都是空白的。

我设置了什么:

/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

我正在尝试使用 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

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

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

有什么想法吗?

【问题讨论】:

  • 在 S3 中实际创建的对象是否也具有正确的 Content-Type,如控制台所示? S3中的ETag是否与原始文件的md5哈希匹配?
  • 内容类型好像是一样的,一个md5不匹配ETag...有趣
  • 本地文件 md5 也与上传文件的 md5 不匹配(如果我再次下载),只是尝试了 .txt 文件,它们似乎可以工作:|
  • 用这个额外的信息更新了原始问题:)

标签: amazon-web-services amazon-s3 aws-api-gateway


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

这是一个旧帖子,但我有一个解决方案。 AWS 现在支持通过 APIGateway READ 上传二进制文件。

一般来说,转到您的 API 设置,然后添加二进制媒体类型。

之后就可以base64处理文件了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2018-11-09
    • 2021-02-04
    • 2016-11-20
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    相关资源
    最近更新 更多