我正在创建一个具有各种端点的 API 网关,其中一个从 S3 获取二进制文件对象,其中所有内容都在 Terraform 中定义。如果我使用预定义的 MIME 类型列表设置网关,它工作正常,例如:
resource "aws_api_gateway_rest_api" "my_api" {
...
binary_media_types = [ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"application/msword",
"application/pdf" ]
...
}
问题是我不提前知道存储桶中将存在的所有 MIME 类型。如果我尝试使用通用二进制 MIME 类型,例如application/octet-stream
我在响应正文中获得其他字符并且无法打开文件。我尝试过使用 MIME 类型,application/*
但出现内部服务器错误(可能无法映射)。
集成响应设置将内容处理设置为直通,没有标头映射或映射模板。方法响应也只有 200 响应,没有标头或模型设置。
我见过一些关于 Lambda 的 Base64 字符串输出和 API Gateway 之间编码不正确的问题,但我的场景只是 S3 -> API Gateway。我查看了以下链接,但它们似乎对我没有帮助,因为它们使用预定义的二进制类型:
有没有办法在 API Gateway 中允许通配符二进制类型,然后通过集成 Content-Type 传递到输出?或者,有没有办法使用通用 MIME 类型,例如application/octet-stream
并阻止 API Gateway 添加其他字符?