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.