无法使用AWS网关/ Lambda设置流式传输PDF

时间:2017-07-31 10:02:06

标签: amazon-web-services aws-lambda aws-api-gateway

问题陈述: - 无法使用AWS网关/ Lambda设置流式传输PDF。

我按照设置进行操作: -

网关API - > Lambda函数(java) - > S3

Api应该通过Lambda从S3服务器将PDF流回客户端。 我无法这样做。

尝试过的事情

  • 1)在Lambda方面

  •   
          
    • 使用RequestStreamHandler,在OutputStream上写PDF             outputStream.write();     
            
                
      • 尝试使用以下
      • 设置Base64编码           
                      
        • AWS Base64实用程序
        •             
        • java.util Base64 Utility
        •             
        • apache Base64实用程序
        •           
             
           
               
      • 发送没有编码的字节[]
      •     
          
          
    • 使用非代理处理程序,将PDF作为字符串写入其中一个输出变量。
    •       
                
      • 尝试使用以下
      • 设置Base64编码           
                      
        • AWS Base64实用程序
        •             
        • java.util Base64 Utility
        •             
        • apache Base64实用程序
        •           
              
            
               
      • 发送没有编码的字节[]
      •       
       
     
  • 2)在网关侧

  •   
          
    • 设置代理集成
    •     
          
    • 删除代理集成
    •     
          
    • 尝试使用
    • 设置内容处理       
                
      • 直通
      •         
      • 转换为二进制
      •         
      • 转换为字符串
      •         
      • 设置标题
      •           
                      
        • 内容类型=' application / pdf'
        •             
        • 内容 - 处置='附件;文件名=" nameofpdffile.pdf"'
        •           
              
        

我已经尝试过这些的所有排列/组合2.但是,我无法让它工作,并且这方面的文档似乎很差。

当我在Lambda中设置Base64编码时,在网关端将内容处理指定为转换为二进制,我得到错误,无法使用Base64解码。 对于其他组合,当我使用网关测试功能测试时,我将二进制数据作为输出,但是我的客户端(邮差,Chrome,Safari)无法将其转换为PDF

注意: - 我有一个解决方法,我在其中创建一个signedURL到S3对象,并将其作为重定向发送。但是,我试图通过使用Lambda流式传输二进制文件来使其工作。

感谢您阅读这么长的帖子。任何指针,正确方向的链接都非常受欢迎。

- 令人沮丧的AWS用户: - )

1 个答案:

答案 0 :(得分:0)

我在尝试提供gzip压缩内容方面遇到了类似的问题:客户端 - > API-Gateway - > S3。

我无法弄清楚为什么我提取的内容无法被客户端(浏览器或代码)识别,直到我检查了标头(二进制标头,而不是http)。 看来API Gateway默认采用基于字符串的编码(utf-8),所以我看到的是API Gateway正在进行转换并在各个地方添加utf-8头的数据。

去年年底,API Gateway开始支持二进制有效负载。我开始阅读这篇文章,这可能对你的情况有所帮助。它不是我的,但你的用例略有不同,更接近文章所以它可能。

https://aws.amazon.com/blogs/compute/binary-support-for-api-integrations-with-amazon-api-gateway/

至于我最终做了什么...我意识到我只是使用API​​网关作为一个直通(利用我已经设置的基于Cognito的身份验证)所以我一起绕过了API网关并使用了aws js sdk直接连接到s3(并分别在存储桶上设置IAM策略)