【问题标题】:AWS Lambda and AWS API Gateway: How to send a binary file?AWS Lambda 和 AWS API Gateway:如何发送二进制文件?
【发布时间】:2016-11-21 17:02:28
【问题描述】:

我有一个 lambda 函数,它使用事件中的输入键从 s3 获取文件,并需要将其发送给客户端。我正在使用以下函数从 s3 获取文件

function getObject(key){
  var params = {
    Bucket: "my_bucket",
    Key: key   
  }
  return new Promise(function (resolve, reject){
    s3.getObject(params, function (err, data){
      if(err){
        reject(err);
      }
      resolve(data.Body)
    })
  })
}

如果我将此承诺(缓冲区)的响应发送到context.succeed,它将在前端显示为 JSON 数组。如何将其作为文件发送?这些文件可以是 ZIP 或 HTTP 存档 (HAR) 文件。 s3 密钥包含适当的扩展名。我猜它与 API Gateway 中的“集成响应”有关。但无法弄清楚在哪里改变

【问题讨论】:

  • 阅读此线程中的官方 AWS 回复:forums.aws.amazon.com/thread.jspa?threadID=195218
  • API Gateway 团队 - Mark B 是对的,那是正式的状态。我们正在努力在未来支持二进制直通,但不支持 ETA。
  • 是否有任何解决方法。我们完整的应用程序是无服务器的。我们希望避免仅出于下载目的创建单独的 EC2 实例
  • 您可以在您的 Lambda 中生成一个预签名的 S3 URL,供您的客户端用来下载。

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


【解决方案1】:

好消息,您现在可以处理 API 网关(announcementdocumentation)的二进制输入和输出。

基本上,您的 Lambda 函数没有任何变化,但您现在可以将 contentHandling API Gateway Integration 属性设置为 CONVERT_TO_BINARY

不幸的是,官方 AWS 示例仅展示了 HTTP API Gateway 后端,因为 AWS Lambda 支持似乎尚未完成。例如,我还没有设法从 AWS Lambda 返回 gzip 压缩的内容,尽管由于新的二进制支持和 $util.base64Decode() 映射实用程序,这应该是可能的。

【讨论】:

  • 你能提供一些例子吗?我是 AWS 的绝对初学者,我目前正在尝试将 zip 文件上传到 Lambda,我还想在本地使用无服务器和无服务器离线框架(用于开发)进行此操作
猜你喜欢
  • 2021-07-29
  • 2019-02-08
  • 2019-06-05
  • 2015-10-21
  • 2019-06-19
  • 2019-01-09
  • 2016-09-14
  • 2017-05-16
  • 2017-11-26
相关资源
最近更新 更多