首页 文章

通过API Gateway或Lambda上传AWS S3 Muitipart

提问于
浏览
0

我正在尝试在AWS中创建可重用的大文件无服务器上载服务(我们托管了许多站点) . 我想要做的是在AWS中设置API网关并使用CORS来控制哪些站点可以上传,允许站点使用客户端代码 . 这就是我遇到的问题 . 想知道是否有人有任何建议的解决方法?

  • 从客户端代码上传调用S3将要求我在客户端土地中公开身份验证信息,这看起来很糟糕

  • API Gateway似乎不支持通过其AWS Service集成类型调用S3多点(URL固定为通用S3服务URL,HTTP集成类型不支持IAM)

  • 利用Lambda调用多部分API将无法工作,因为它只能接收6 MB的调用请求负载,并且为了获得5 MB的最小上传部分大小,base64将使数据方式超过6 MB

  • 我可以在Lambda中执行我自己的部分上传功能,在S3中存储块,但我可以't figure out how to merge them together within Lambda' s内存和tmp存储空间(仍然PassThrough流似乎不适用于AWS SDK)

有任何想法吗?这些都值得挖掘吗?或者这个用例是无服务器吗?

因此,在进一步跟进亚马逊之后,它不太实用 . 涉及的步骤包括以下内容:

  • 创建一个新文件,并将其拆分为多个部分 .

  • 生成预签名URL以启动multiart上载 .

  • 使用预签名URL启动上传 .

  • 使用部件号为每个部件生成预签名URL .

  • 使用URL发送PutPart请求 . 跟踪为部件号返回的Etag .

  • 组合所有零件和相应的ETAG以形成请求体 .

  • 生成预签名URL以完成MP上传 .

  • 通过使用预先签名的完整分段上传URL发送请求来完成分段上传 .

将接受Angelo的回答,因为它确实指出了这个方向,从技术上讲,这似乎是可能的

1 回答

相关问题