无法在浏览器中显示使用 AWS API Gateway 下载的图像,但在 Postman 中显示图像

问题描述 投票:0回答:1

我想使用 AWS API Gateway 在我的网站上显示 S3 存储桶中的图像。我按照 AWS 的本手册进行操作:如何通过 API Gateway 将图像或 PDF 文件上传到 Amazon S3?

如果我想使用网络浏览器显示图像(从API网关链接到图像),网络浏览器会下载一些无法显示的奇怪图像。当我使用 Postman 时,图像显示没有任何问题。我尝试从网络浏览器下载图像,但无法显示。从 Postman 下载的图像按预期工作。

使用 API Gateway 上传文件没有问题,因为它不会在浏览器中显示我直接上传到 S3(使用 AWS 控制台)的图像。

API网关设置:

  • 在 GET 方法中
    Method Execution
    ->
    Integration Request
    已设置
    Content Handling
    Passthrough
  • Method Execution
    ->
    Method Response
    中的 GET 方法中,在 Http Status 200 下设置:
    Access-Control-Allow-Origin
    Content-type
  • 在方法执行 -> 集成响应中的
    Http Status 200
    下的 GET 方法中设置:
    Access-Control-Allow-Origin
    '*'
    Content-type
    'image/jpeg'

Binary Media Type
下的API设置中设置
image/jpeg

在 Postman 和 Web 浏览器中的开发工具 -> 网络中,当我单击 API Gateway 中的图像时,标题为:

  • Accept:
    image/jpeg
  • Content-Type:
    image/jpeg
  • Access-Control-Allow-Origin:
    *

注意: Api Gateway 部署到最新版本,CORS 没有问题(CORS 已启用) 如果您需要更多信息,请告诉我。

更新: 最近我尝试重新创建 GET 请求。它不是在手册中编写的,但是当我将标题添加到

Method Response
下的
Response Header for 200
Accept
下的
Integration Response
中时,我设置了
Header Mappings
Accept
图像正确地显示在Postman中,而不是它
    

amazon-web-services api-gateway
1个回答
0
投票
这篇文章

有迄今为止我找到的关于它为什么不起作用的最好解释:

尽管文档建议可以在二进制响应的 Accept 标头中指定多种内容类型,但这似乎会破坏转换。这使得当前的实现对于浏览器来说毫无用处,默认情况下,浏览器请求复杂的 Accept 标头。
这意味着目前无法使用 API Gateway/AWS_PROXY 集成来返回只能使用 img 标签包含在网页中的图像。

我希望他们错了。 🤨

© www.soinside.com 2019 - 2024. All rights reserved.