c# - Serverless API Gateway/Lambda 下载 PDF 失败
问题描述
我使用无服务器 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 无法返回 PDF 文件后,我还在我的 API Gateway 中添加 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)。它只是在部署后不起作用
解决方案
使用 sam 1.33.0,它使用这样的AWS::Serverless::Api
资源:
LocalApi:
Type: AWS::Serverless::Api
Properties:
StageName: dev
DefinitionBody:
x-amazon-apigateway-binary-media-types:
- "*/*"
推荐阅读
- javascript - 无法使用 Puppeteer Js 选择下拉值
- django - /students/exam/1/ 'choice_pk2' 处的 MultiValueDictKeyError
- android - 如何在可绘制资源上添加圆角边框
- c# - 对文化、流向和语言感到困惑
- php - 如何使用 MySQL 和 PHP 将每次登录的用户注销时间存储在数据库中?
- r - 过滤以在特定列中的特定值第一次出现之前删除所有行
- c++ - PLU分解的矩阵逆
- wpf - 使数据网格单元格的内容跨越多个相邻的单元格空间
- php - 插入新数据后 PHP api 无法正常工作
- postgresql - PostgreSQL 全局事务和还原时间点