【发布时间】:2021-06-16 17:32:07
【问题描述】:
我使用无服务器 SAM 和 .NET 核心创建了一个 lambda 函数。此函数通过 API Gateway 在 GET 请求上触发,并应返回一个 pdf 文件。我正在使用 itextsharp 创建 pdf 并尝试使用以下命令返回 pdf 文件
public async Task<IActionResult> GenerateReport()
{
var reportName = "test";
var result = await reportHandler.GenerateReportAsync();
return File(result, System.Net.Mime.MediaTypeNames.Application.Pdf, reportName + ".pdf");
}
查看此线程AWS Lambda fails to return PDF file 后,我还在我的 API 网关中添加 application/pdf 作为二进制媒体类型,就像在我的 serverless.yaml 中一样
Globals:
Api:
BinaryMediaTypes:
- application~1pdf
Resources:
ApiGateway:
Type: AWS::Serverless::Api
Properties:
StageName:
Ref: Environment
Name:
Fn::Join:
- "-"
- - Ref: AWS::StackName
- "api"
ContentHandling:
- CONVERT_TO_BINARY
但是,当我尝试打开 PDF 时,仍然出现错误:“无法打开 PDF 文档”。当我用记事本打开 pdf 文件时,它看起来像这样(我只是把它缩短了)
JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCAxNzIvSGVpZ2h0IDM2L0xlbmd0aCAxNjkwL0NvbG9yU3BhY2VbL0luZGV4ZWQvRGV2aWNlUkdCIDI1NSigoKBNTU0BAQGhoaECAgIXFxdMTEz9/f2Xl5f+/v7y8vJpaWkYGBjx8fHMzMxZWVkWFhalpaUcHBwZGRlLS0ukpKQGY1YzRlNjFhNjIwYjFkZjNjMDM1MjE1PjwwZTk1MTRhOGRmNWM0ZTYxYTYyMGIxZGYzYzAzNTIxNT5dPj4KJWlUZXh0LTUuNS4xMy4yCnN0YXJ0eHJlZgo0NTQzCiUlRU9GCg==
任何人都可以帮助这里的问题是什么?
注意:它在我的本地机器上运行良好(我可以完美地打开 PDF)。部署后就不行了
【问题讨论】:
-
文件正在被base64编码。也许试试这个
https://stackoverflow.com/questions/59263288/how-to-stop-aws-api-gateway-from-base64-encoding-binary-responses会有所帮助? -
@FrankNielsen 我不确定将“x-amazon-apigateway-integration”放在我的 serverless.yaml 中的哪个位置。但是,我尝试在内容处理中添加 CONVERT_TO_BINARY(请参阅我的 serverless.yaml),但仍然无法正常工作。有什么想法吗?
标签: c# asp.net-web-api lambda aws-api-gateway