我想从AWS Lambda函数返回一个pdf,并使用API Gateway从任何浏览器调用它。
我在c#中有一个aws lambda函数,它返回一个API Gateway响应,该响应的主体是base64 encoded string中的pdf。
到目前为止,端点返回的文件扩展名为.pdf,但不是二进制文件。而是一个包含base64字符串的文本文件。
我从c#代码返回的头文件是:
var headersDic = new Dictionary<string, string>();
headersDic.Add("Content-type", "application/pdf");
headersDic.Add("Content-disposition", "attachment; filename=file.pdf");我手动将base64字符串转换为二进制文件,并将其作为pdf打开,它可以工作,我的意思是,base64字符串是正确的,所以我假设问题出在API Gateway。
在API网关的集成响应控制台中,我得到了如下信息:

但我不能让它工作。
我还启用了二进制媒体类型。

发布于 2018-09-05 04:51:45
我不知道我到底做了什么,但我删除了'ALL‘方法,并用这个配置创建了'GET’方法,现在它可以工作了。

发布于 2019-02-12 08:43:20
您还需要在LambdaEntryPoint.cs中声明内容类型,如下所示
你必须告诉Lambda你将返回一些字符串以外的东西。
public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
{
protected override void Init(IWebHostBuilder builder)
{
builder
.UseStartup<Startup>();
****IMPORTANT PART HERE****
RegisterResponseContentEncodingForContentType("application/pdf",
ResponseContentEncoding.Base64);
}
}发布于 2020-06-03 14:35:57
响应报头
'Content-Type': 'application/pdf'
'Content-disposition', 'attachment; filename=fileName.pdf'对客户端的响应
{
statusCode: 200
headers: responseHeader,
body: pdfContent.toString(base64),
isBase64Encoded: true,
}API网关二进制媒体类型

希望能有所帮助
https://stackoverflow.com/questions/52156418
复制相似问题