amazon-web-services - AWS lambda 不返回二进制内容
问题描述
我有一个使用 CDK 部署到 AWS 的 API。我正在使用 lambda 代理集成。我正在尝试创建一个新的 API 调用,它将返回一个 zip 文件,但我无法让它返回二进制数据。这是我所拥有的:
这最终会从浏览器链接调用,所以我按照这个文档binaryMediaTypes
设置为(我也尝试将它设置为):*/*
application/zip
const api = new apigateway.RestApi(this, "cursive-api", {
restApiName: props.apiName,
... etc etc ...
binaryMediaTypes: ["*/*"]
});
我的集成contentHandling
设置为CONVERT_TO_BINARY
:
const downloadIntegration = new apigateway.LambdaIntegration(downloadFn,
{
proxy: true,
contentHandling: apigateway.ContentHandling.CONVERT_TO_BINARY
});
我正在使用curl
并传递Accept
标题:
curl -i -H "Accept: application/zip" <url>
我可以在 CloudWatch 中看到接受标头正在通过 CloudFront 确定:
Field Value
@ingestionTime 1620087566765
@log 592838288812:API-Gateway-Execution-Logs_xxx/prod
@logStream xxx
@message (xxx) Method request headers: {Accept=application/zip, CloudFront-Viewer-Country=NZ, CloudFront-Forwarded-Proto=https, CloudFront-Is-Tablet-Viewer=false, CloudFront-Is-Mobile-Viewer=false, User-Agent=curl/7.64.1, X-Forwarded-Proto=https, CloudFront-Is-SmartTV-Viewer=false, Host=staging-api.cursive-ide.com, X-Forwarded-Port=443, X-Amzn-Trace-Id=Root=1-xxx, Via=2.0 xxx.cloudfront.net (CloudFront), X-Amz-Cf-Id=Guy-_xxx==, X-Forwarded-For=151.210.253.227, 130.176.150.98, CloudFront-Is-Desktop-Viewer=true}
@timestamp 1620087546597
我还可以在 CloudWatch 中看到我正在设置 isBase64Encoded 并且内容类型是正确的:
Field Value
@ingestionTime 1620087566765
@log 592838288812:API-Gateway-Execution-Logs_xxx/prod
@logStream xxx
@message (xxx) Endpoint response body before transformations: {"statusCode":200,"headers":{"content-type":"application/zip","Content-Disposition":"attachment; filename=\"licences.zip\"","access-control-allow-origin":"https://<url>"},"isBase64Encoded":true,"body":"UEsDBETCETCETC [TRUNCATED]
@timestamp 1620087548798
但是,无论我做什么,我都只能得到 base64 编码的字符串。
解决方案
推荐阅读
- python - Python, Youtube-video-downloader-merger 我可以让这个脚本运行得更快吗?
- fancybox-3 - 你如何防止花哨的盒子的关闭按钮自动隐藏?
- .net - 如何显示 NuGet 包依赖项?
- ios - 无法使用 Core Data 和 Swift 在表格视图中正确保存和显示数据
- javascript - 用过滤器代替接头
- sql - 在表 Sql Server 中创建多个编号的行
- android - 在 kotlin 中使用 itext5 将表格添加到现有 PDF
- html - 在 NavBar 中间定位 Logo
- list - 在 SharePoint 列表表单中生成动态列表列字段
- javascript - YouTube Data API 搜索中的“items”元素在调用“/videos”时不返回任何内容