API Gateway 无法流式传输生成的 PDF,原因是编码类型

0

【以下的问题经过翻译处理】 我已在以下提供了有关这个问题的一些修复和故障排除的更新。

我有一个简单的应用程序,本地运行完美。一个 React 前端接受一些文本输入,以及一个 Express 后端,生成包含信息的 PDF 并流式返回生成的 PDF。整个应用程序工作正常,包括本地运行以及特别在本地运行的 Insomnia 请求端点时。

前端目前部署在 S3 存储桶中,通过 CloudFront 提供服务,一切正常。如果我使用 Insomnia 发出指向我的部署 API 的请求,GET 请求正常工作,返回的内容与预期一致,并在内容窗口中显示生成的 PDF。

然而,当我发出 POST 请求时,我收到了一些混合的消息。如果我在 Insomnia 中点击 POST 请求,会得到 200 的响应,但返回的 PDF 是空白的,尽管我验证过它确实接收到了 POST 主体。

如果我使用部署的用户界面或本地用户界面指向部署的 API,我会收到一些错误。

  • Access to fetch at 'API ENDPOINT URL' from origin 'MY UI ORIGIN' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
  • POST 'API ENDPOINT URL' net::ERR_FAILED
  • Uncaught (in promise) TypeError: Failed to fetch

第二个错误感觉像是由第一个错误引起的误报。不过,我的 API 网关已启用 CORS,目前允许通配符访问。GET 请求运行正常。我还在网关设置的二进制媒体类型中启用了 "application/json "和 "application/pdf"。

我看到了一些几年前的帖子,表明 API Gateway 不支持流式传输文件,但我不确定是否正确。如果是这样,这意味着我需要找到另一种方法来为最终用户提供生成的文件。或者如果已经更改了这个情况,那么我的 AWS 实现存在其他错误。

更新:我取得了一些进展。为了测试,我实际上从我的 API Gateway 中移除了 OPTIONS 方法。这实际上去除了 CORS 错误,这是出乎意料的。GET 请求仍然像以前一样工作,所有响应都返回 200。但 PDF 呈现不正确或损坏。它在本地仍然正常工作,但从部署的 API 返回的 PDF 不正常。我还在 API Gateway 中的测试功能中得到了相同的结果,但可以确认它在本地运行正常。

最新进展:在删除了看似误导的其他错误后,问题变成了 API Gateway 在编码类型方面存在一些挑战。尽管我确保在 API Gateway 中设置了二进制类型,在我的代码库中也进行了设置,并在客户端上设置了接受头,但返回的文档似乎仍然存在编码问题。这就是当前问题所在,我将继续努力解决。

profile picture
专家
已提问 5 个月前40 查看次数
1 回答
0

【以下的回答经过翻译处理】 首先,请确保这不是CORS问题。请查看AWS Premium Support提供的关于如何调试CORS问题的文档 - https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-cors-errors/

此外,请查看此文档中的说明,以确保您在API Gateway中正确处理二进制数据,假设您正在使用REST API - https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-configure-with-control-service-api.html

如果您正在使用AWS API Gateway中的HTTP API而不是REST API,请按照此处的说明操作 - https://aws.amazon.com/blogs/compute/handling-binary-data-using-amazon-api-gateway-http-apis/

这篇文章也可能会有所帮助 - https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-binary-data-lambda/

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则