我正在尝试在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 回答
您可以使用预先签名的网址进行上传 . 在这种情况下,客户端会点击您的API,这将执行任何必要的验证,然后生成一个返回给客户端的预先签名的URL到S3 . 然后客户端直接上传到s3 .
你可以在这里看到一些信息:https://sanderknape.com/2017/08/using-pre-signed-urls-upload-file-private-s3-bucket/