sam*_*yst 9 lambda amazon-web-services node.js aws-api-gateway serverless-framework
我使用无服务器创建了一个lambda函数.此函数在GET请求上通过API网关触发,并应从缓冲区返回pdf文件.我正在使用html-pdf创建缓冲区并尝试使用以下命令返回pdf文件
let response = {
statusCode: 200,
headers: {'Content-type' : 'application/pdf'},
body: buffer.toString('base64'),
isBase64Encoded : true,
};
return callback(null, response);
Run Code Online (Sandbox Code Playgroud)
但浏览器只是无法加载pdf,所以我不确切知道如何将pdf文件直接返回到浏览器.无法找到解决方案.
sam*_*yst 16
好吧,我找到了答案.我的响应对象中的设置很好,我只需手动更改API网关中的设置,以便在浏览器中工作.我在API网关控制台的二进制设置下为二进制媒体类型添加了"*/*"
API网关
前端
在新标签中打开api url(target ="_ blank").浏览器可能正在处理编码的base 64响应.在我的情况下使用chrome,浏览器只是在新选项卡中打开pdf,就像我想要的那样.
在花费了几个小时后,我发现如果您将其设置Content handling为Convert to binary(CONVERT_TO_BINARY),则整个响应必须为base64,否则我将收到错误消息:Unable to base64 decode the body。
因此,我现在的响应如下所示:
callback(null, buffer.toString('base64'));
整合回应:
方法响应:
和二进制媒体类型:
如果您的PDF很大,那么Lambda会花很长的时间才能返回它,而在Lambda中,您每100毫秒需付费一次。
我先将其保存到S3,然后让Lambda将S3网址返回给客户端进行下载。
| 归档时间: |
|
| 查看次数: |
15632 次 |
| 最近记录: |