简体   繁体   中英

Serverless API Gateway/Lambda fails to download PDF

I have created a lambda function using serverless SAM and .NET core. This function is fired via API Gateway on a GET request and should return a pdf file. I'm using itextsharp to create pdf and trying to return the pdf file with the following command

public async Task<IActionResult> GenerateReport()
{
    var reportName = "test";
    var result = await reportHandler.GenerateReportAsync();         
    return File(result, System.Net.Mime.MediaTypeNames.Application.Pdf, reportName + ".pdf");
}

After take a look this thread AWS Lambda fails to return PDF file I also add application/pdf as binary mediatype in my API Gateway like this in my 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

However when I try to open the PDF, I still got an error: "failed to open PDF Document". When I open the pdf file with notepad it looks something like this (I just make it shortend)

JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCAxNzIvSGVpZ2h0IDM2L0xlbmd0aCAxNjkwL0NvbG9yU3BhY2VbL0luZGV4ZWQvRGV2aWNlUkdCIDI1NSigoKBNTU0BAQGhoaECAgIXFxdMTEz9/f2Xl5f+/v7y8vJpaWkYGBjx8fHMzMxZWVkWFhalpaUcHBwZGRlLS0ukpKQGY1YzRlNjFhNjIwYjFkZjNjMDM1MjE1PjwwZTk1MTRhOGRmNWM0ZTYxYTYyMGIxZGYzYzAzNTIxNT5dPj4KJWlUZXh0LTUuNS4xMy4yCnN0YXJ0eHJlZgo0NTQzCiUlRU9GCg==

Anyone can help what is the problem here?

Note: It working fine in my local machine (I can open PDF perfectly). It just doesn't work after deployment

Using sam 1.33.0, It worked with an AWS::Serverless::Api resource like this:

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

You can use serverless-apigw-binary plugin in your serverless.yaml file. The gateway binary plugin helps to generate binary types from api gate way. Try:

plugins: 
   - serverless-apigw-binary

custom:
    apigwBinary:
     types:
      - "application/pdf"

Hope that helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM