首页 > 解决方案 > 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)。它只是在部署后不起作用

标签: c#asp.net-web-apilambdaaws-api-gateway

解决方案


使用 sam 1.33.0,它使用这样的AWS::Serverless::Api资源:

  LocalApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
      DefinitionBody:
        x-amazon-apigateway-binary-media-types:
          - "*/*"

推荐阅读