簡體   English   中英

通過API網關或Lambda上傳AWS S3 Muitipart

[英]AWS S3 Muitipart Upload via API Gateway or Lambda

我正在嘗試在AWS(我們托管許多站點)中創建可重用的大文件無服務器上載服務。 我想做的是在AWS中設置一個API網關,並使用CORS來控制哪些網站可以上傳,從而允許這些網站使用客戶端代碼。 這是我嘗試過的以及遇到的障礙。 想知道是否有人有任何建議的解決方法?

  • 從客戶端代碼上傳中調用S3將需要我在客戶端域中公開身份驗證信息,這似乎很糟糕
  • API網關似乎不支持通過其AWS服務集成類型調用S3多點(URL固定為通用S3服務URL,HTTP集成類型不支持IAM)
  • 利用Lambda調用多部分API無效,因為它只能吸收6 MB的調用請求有效負載,並且為了獲得5 MB的最小上傳部分大小,base64將使數據方式超過6 MB
  • 我可以在Lambda中做自己的部分上傳功能,將塊存儲在S3中,但是我不知道如何在Lambda的內存和tmp存儲空間中將它們合並在一起(仍然PassThrough流似乎不適用於AWS開發工具包)

有任何想法嗎? 這些值得一探嗎? 還是對於這種用例而言,無服務器是難事嗎?

因此,在對Amazon進行進一步跟進之后,可以將預先簽名的URL與multipart API結合使用,但這不是很實用。 涉及的步驟包括:

  1. 創建一個新文件,並將其拆分為多個部分。
  2. 生成一個預簽名的URL以啟動多作品上傳。
  3. 使用預簽名的URL發起上傳。
  4. 使用零件號為每個零件生成一個預簽名的URL。
  5. 使用URL發送PutPart請求。 跟蹤為零件號返回的Etag。
  6. 結合所有部分和相應的ETAG形成請求主體。
  7. 生成一個預簽名的URL以完成MP上傳。
  8. 通過發送帶有預先簽名的完整分段上傳URL的請求來完成分段上傳。

將接受安傑洛的回答,因為它確實指出了這個方向,從技術上講,這似乎是可能的

您也許可以使用預先簽名的網址進行上傳。 在這種情況下,客戶端將訪問您的API,該API將執行所需的任何驗證,然后生成指向S3的預簽名URL,並將其返回給客戶端。 然后,客戶端直接上傳到s3。

您可以在此處查看一些信息: https : //sanderknape.com/2017/08/using-pre-signed-urls-upload-file-private-s3-bucket/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM