首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从lambda返回二进制pdf文件的AWS API网关配置

从lambda返回二进制pdf文件的AWS API网关配置
EN

Stack Overflow用户
提问于 2018-09-04 05:37:51
回答 3查看 4.5K关注 0票数 3

我想从AWS Lambda函数返回一个pdf,并使用API Gateway从任何浏览器调用它。

我在c#中有一个aws lambda函数,它返回一个API Gateway响应,该响应的主体是base64 encoded string中的pdf

到目前为止,端点返回的文件扩展名为.pdf,但不是二进制文件。而是一个包含base64字符串的文本文件。

我从c#代码返回的头文件是:

代码语言:javascript
运行
复制
  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网关的集成响应控制台中,我得到了如下信息:

但我不能让它工作。

我还启用了二进制媒体类型。

EN

回答 3

Stack Overflow用户

发布于 2018-09-05 04:51:45

我不知道我到底做了什么,但我删除了'ALL‘方法,并用这个配置创建了'GET’方法,现在它可以工作了。

票数 0
EN

Stack Overflow用户

发布于 2019-02-12 08:43:20

您还需要在LambdaEntryPoint.cs中声明内容类型,如下所示

请参阅此文档:https://github.com/aws/aws-lambda-dotnet/blob/master/Libraries/src/Amazon.Lambda.AspNetCoreServer/README.md

你必须告诉Lambda你将返回一些字符串以外的东西。

代码语言:javascript
运行
复制
public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
{

    protected override void Init(IWebHostBuilder builder)
    {
        builder
            .UseStartup<Startup>();

        ****IMPORTANT PART HERE****
        RegisterResponseContentEncodingForContentType("application/pdf",
            ResponseContentEncoding.Base64);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2020-06-03 14:35:57

响应报头

代码语言:javascript
运行
复制
'Content-Type': 'application/pdf'
'Content-disposition', 'attachment; filename=fileName.pdf'

对客户端的响应

代码语言:javascript
运行
复制
{
 statusCode: 200
 headers: responseHeader,
 body: pdfContent.toString(base64),
 isBase64Encoded: true,
}

API网关二进制媒体类型

希望能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52156418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档