AWS Lambda 无法返回 PDF 文件

新手上路,请多包涵

我使用 serverless 创建了一个 lambda 函数。此函数通过 API Gateway 在 GET 请求上触发,并应从缓冲区返回一个 pdf 文件。我正在使用 html-pdf 创建缓冲区并尝试使用以下命令返回 pdf 文件

  let response = {
    statusCode: 200,
    headers: {'Content-type' : 'application/pdf'},
    body: buffer.toString('base64'),
    isBase64Encoded : true,
  };
  return callback(null, response);

但是浏览器只是无法加载pdf,所以我不知道如何将pdf文件直接返回给浏览器。找不到解决方案。

原文由 sami_analyst 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 704
2 个回答

好吧,我找到了答案。我的响应对象中的设置很好,我只需要手动更改 API Gateway 中的 设置 即可在浏览器中使用。我已在 API Gateway 控制台的二进制设置下将“*/*”添加到二进制媒体类型

API 网关

  1. 只需登录您的控制台
  2. 选择你的 API
  3. 单击下拉列表中的二进制支持
  4. 编辑二进制媒体类型并添加“*/*”

前端

在新选项卡中打开 api url (target=“_blank”)。可能浏览器正在处理编码的 base 64 响应,在我使用 chrome 的情况下,浏览器只是在新选项卡中打开 pdf,就像我想要的那样。

原文由 sami_analyst 发布,翻译遵循 CC BY-SA 4.0 许可协议

在这上面花了几个小时后,我发现如果你将 Content handling 设置为 Convert to binary (CONVERT_TO_BINARY) 整个响应必须是 base64,否则我会得到一个错误: Unable to base64 decode the body

因此我的回应现在看起来像:

callback(null, buffer.toString('base64'));

集成响应:

在此处输入图像描述

方法响应:

在此处输入图像描述

和二进制媒体类型:

在此处输入图像描述

原文由 teocomi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题