【发布时间】:2018-11-09 14:23:44
【问题描述】:
我正在尝试在 AWS 中创建一个可重复使用的大文件无服务器上传服务(我们托管了许多站点)。我想做的是在 AWS 中设置一个 API 网关,并使用 CORS 来控制哪些站点可以上传,允许站点使用 client-side 代码。这是我尝试过的方法以及遇到的障碍。想知道是否有人有任何建议的解决方法?
- 从客户端代码上传调用 S3 需要我在客户端公开身份验证信息,这似乎很糟糕
- API Gateway 似乎不支持通过其 AWS 服务集成类型调用 S3 多点(URL 固定为通用 S3 服务 URL,并且 HTTP 集成类型不支持 IAM)
- 利用 Lambda 调用 multipart API 是行不通的,因为它只能接收 6 MB 的调用请求负载,并且要获得 5 MB 的最小上传部分大小,base64 将使数据方式超过 6 MB
- 我可以在 Lambda 中执行我自己的部分上传功能,将块存储在 S3 中,但我不知道如何在 Lambda 的内存和 tmp 存储空间中将它们合并在一起(仍然 PassThrough 流似乎不适用于 AWS SDK)
有什么想法吗?这些值得深入研究吗?或者对于这个用例来说,无服务器是不行的?
因此,在与 Amazon 进一步跟进之后,在多部分 API 中使用预签名 URL 是有可能的,但这不是很实用。涉及的步骤将包括以下内容:
- 创建一个新文件,并将其拆分为多个部分。
- 生成预签名 URL 以启动多艺术上传。
- 使用预签名 URL 启动上传。
- 使用部件号为每个部件生成预签名 URL。
- 使用 URL 发送 PutPart 请求。跟踪为部件号返回的 Etag。
- 将所有部分和相应的 ETAG 组合成请求正文。
- 生成预签名 URL 以完成 MP 上传。
- 通过使用预先签名的完整分段上传 URL 发送请求来完成分段上传。
会接受安吉洛的回答,因为它确实指出了这个方向,从技术上讲,这似乎是可能的
【问题讨论】:
标签: amazon-web-services aws-lambda aws-sdk aws-api-gateway