【问题标题】:How to facilitate downloading both CSV and PDF from API Gateway connected to S3如何促进从连接到 S3 的 API 网关下载 CSV 和 PDF
【发布时间】:2023-03-15 00:33:02
【问题描述】:

在我正在开发的应用程序中,我们有一个流程,用户可以通过该流程下载其数据的 CSV 或 PDF 版本。这一代效果很好,但我试图让它下载文件并遇到各种问题。我们对所有请求都使用 API Gateway,并且生成发生在 Lambda 中的 POST 请求上。 GET 端点接受 file_name 参数,然后在 S3 中构造路径,然后直接在那里发出请求。我遇到的问题是当我试图转换响应时。我收到 500 错误,当我查看日志时,它显示 Execution failed due to configuration error: Unable to transform response。所以,很明显,这是我大部分时间都花在这上面的地方。我已经尝试了至少 50 次不同的模板和组合迭代,但收效甚微。我得到的最接近的是以下代码,CSV 下载正常,但 PDF 不再是有效的 PDF:

CSV:

#set($contentDisposition = "attachment;filename=${method.request.querystring.file_name}")
$input.body
#set($context.responseOverride.header.Content-Disposition = $contentDisposition)

PDF:

#set($contentDisposition = "attachment;filename=${method.request.querystring.file_name}")
$util.base64Encode($input.body)
#set($context.responseOverride.header.Content-Disposition = $contentDisposition)

在哪里contentHandling = CONVERT_TO_TEXT。我的 binaryMediaTypes 只有application/pdf,仅此而已。 我的目标 是在无需将问题卸载到 Lambda 的情况下使其正常工作,因此我们在下载步骤中没有这种开销。任何想法如何正确地做到这一点?

正如另一条评论,我试过CONVERT_TO_BINARY 并将其保留为Passthrough。我已经尝试使用text/csv 作为另一种二进制媒体类型,并且尝试了编码和解码 base64 和其他内容的不同组合。我知道数据是从 S3 中返回的,但是转换是中断的地方。如果需要,我很乐意发布更多日志。另外,我很确定这在 StackOverflow 上是有意义的,但如果它更适合另一个 StackExchange 站点,请告诉我。

我看过的资源:

编辑: 我的一个想法是做CONVERT_TO_BINARY 并以某种方式对转换中的CSV 进行base64 编码,但我不知道如何正确地做到这一点。我一直觉得我误解了事情的顺序,特别是当“转换”部分发生时。如果这有任何意义。

编辑 2: 所以,我删除了 PDF 文件中的 $util.base64Encode,现在我有了一个空的 PDF。 S3 中的实际文件肯定有东西,但由于某种原因 CONVERT_TO_TEXT 没有正确处理它,或者我仍然不了解这一切是如何工作的。

【问题讨论】:

    标签: amazon-web-services csv pdf amazon-s3 api-gateway


    【解决方案1】:

    有类似的问题。一件主要的事情是 Accept 标头。我在 chrome 中进行测试,它将 Accept 标头作为 text/html、application/xhtml .... api-gateway 忽略除第一个(文本/html)之外的所有内容。然后它将任何响应从 S3 转换为 base64 以尝试符合 text/html。

    最后,在尝试了所有其他方法之后,我通过 Postman 尝试了默认 Accept 标头为 */*。还要将集成响应上的内容处理设置为直通。一切正常!

    另一件事是传递 Content-Type 和 Content-Length 标头(先将它们添加到方法响应中,然后再添加到集成响应中):

    内容长度集成.response.header.内容长度
    Content-Type integration.response.header.Content-Type

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 2023-02-22
      • 2022-07-28
      • 2022-11-05
      • 2022-08-22
      相关资源
      最近更新 更多