使用多部分上傳功能將檔案上傳至 Lightsail 儲存貯體 - Amazon Lightsail

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用多部分上傳功能將檔案上傳至 Lightsail 儲存貯體

分段上傳可將單個檔案分成幾組分段上傳至儲存貯體。每個組件都是檔案資料的接續部分。您可依任何順序分別上傳這些檔案組件。若任何組件的傳輸失敗,您可再次傳輸該組件,而不會影響其他組件。上傳檔案的所有部分之後,Amazon S3 會組合這些零件,並在 Amazon Lightsail 的儲存貯體中建立物件。一般而言,當物件大小達到 100 MB 時,應考慮使用分段上傳,而不是以單次操作上傳物件。如需有關儲存貯體的詳細資訊,請參閱物件儲存

使用分段上傳具備下列優勢:

  • 改善傳輸量 - 您可平行上傳各組件以改進傳輸量。

  • 快速從任何網路問題復原 - 組件大小若較小,對於重新開始因為網路發生錯誤而上傳失敗的影響可降到最低。

  • 隨時間上傳 - 您可以隨時間上傳檔案組件。啟動分段上傳之後,您有 24 小時完成分段上傳。

  • 在您知道最終檔案大小前開始上傳 - 您可在建立檔案的同時上傳它。

建議您依照下列方式使用分段上傳:

  • 若您透過穩定的高頻寬網路上傳大型檔案,使用分段上傳可同時上傳多個檔案組件以取得多執行緒效能,因而完全善用可用的頻寬使用量。

  • 若是透過不穩定的網路進行上傳,使用分段上傳可避免上傳重新開始,因而此更快從網路故障中復原。使用分段上傳時,只有組件中斷才需要重試上傳。不需要重新開始或再次上傳整個檔案。

內容

分段上傳程序

分段上傳是一個三個步驟的程序,使用 Amazon S3 動作將檔案上傳到 Lightsail 中的儲存貯體:

  1. 您可以使用動作啟CreateMultipartUpload動分段上傳。

  2. 您可以使用UploadPart動作上載檔案部分。

  3. 您可以使用CompleteMultipartUpload動作完成分段上傳。

注意

您可以在啟動多部分上傳之後,使用AbortMultipartUpload動作來停止它。

當分段上傳請求完成時,Amazon Simple Storage Service 會從上傳的分段中建構物件。然後,您可以使用與存取儲存貯體中任何其他物件相同的方式來存取物件。

您可以列出所有進行中的分段上傳,或是取得特定分段上傳之已上傳組件的清單。本節會一一說明這些操作。

啟動分段上傳

當您傳送請求以啟動分段上傳時,Amazon Simple Storage Service 會傳回具有上傳 ID 的回應。這是分段上傳的唯一識別符。每次上傳各組件、列出各組件、完成上傳或停止上傳時,都必須納入上傳 ID。若您希望提供任何中繼資料,說明正在上傳中的物件,您必須在分段上傳啟動請求中指定中繼資料。

組件上傳

上傳某個分段組件時,除了上傳 ID 之外,還必須指定組件編號。您可選擇 1 到 10,000 之間的任何組件編號。組件編號可找出獨特的某個組件,以及其在上傳中物件內的位置。您選擇的組件編號無須為連續的號碼 (例如,其可為 1、5 和 14)。若使用和前一個上傳組件相同的組件編號上傳新的組件,將會覆寫前一個已上傳的組件。

每次上傳一個分段時,Amazon Simple Storage Service 會在其回應中傳回 ETag 標頭。您必須記錄每個上傳組件的組件編號與 ETag 值。後續的要求中必須包含這些值,才能完成分段上傳。

注意

分段上傳的所有已上傳組件都存放在儲存貯體上。它們會消耗儲存貯體的儲存空間,直到您完成上傳、停止上傳或上傳逾時為止。如需詳細資訊,請參閱本指南稍後的分段上傳保留

完成分段上傳

當您完成分段上傳時,Amazon Simple Storage Service 會根據分段編號以遞增順序串連各個分段,從而建立物件。分段上傳啟動請求中若已提供任何物件中繼資料,Amazon Simple Storage Service 便會將該中繼資料與物件建立關聯。成功完成請求之後,這些組件就不再存在。

完成的分段上傳請求必須包含上傳 ID 以及組件編號和對應 ETag 值的清單。Amazon Simple Storage Service 回應包含的 ETag 可識別獨特的物件資料組合。這個 ETag 不一定是物件數據的 MD5 雜湊。

您也可以選擇性停止分段上傳。停止分段上傳之後,即無法再次使用該上傳 ID 上傳任何組件。之後,取消的分段上傳中的任何部分會釋出所有儲存空間。如有任何分段上傳正在進行,則會在您中止後成功或失敗。若要釋出所有組件所使用之全部的儲存體,您必須在所有上傳組件都已完成後,再停止分段上傳。

分段上傳清單

您可列出特定分段上傳的組件或所有進行中之分段上傳。列出組件操作會傳回特定分段上傳之已上傳組件的資訊。Amazon Simple Storage Service 會為每項列出的分段請求,傳回指定分段上傳的各分段資訊,上限為 1,000 個分段。若分段組件上傳中有超過 1,000 個組件,您必須傳送一連串的列出組件要求,才可擷取所有組件。請注意,傳回的組件清單不包含仍在上傳程序中的組件。使用列出分段上傳操作,即可取得進行中的分段上傳清單。

進行中的分段上傳是您已啟動但尚未完成或已停止的上傳。每個要求最多可傳回 1,000 個分段上傳。若正在進行超過 1,000 個的分段上傳,您必須另行傳送請求以擷取剩餘的分段上傳。僅使用傳回的清單進行驗證。在傳送完成的分段上傳請求時,請勿使用此清單的結果。而是在上傳 Amazon Simple Storage Service 傳回的各分段與相對應之 ETag 值時,維持您自己的分段編號清單。

並行分段上傳操作

在分散式開發環境中,您的應用程式有可能同時對相同的物件啟動數項更新。您的應用程式可能使用相同的物件金鑰,啟動數項分段上傳。對於每一個上傳,應用程式會上傳各分段,並對 Amazon Simple Storage Service 傳送完整的上傳請求,以建立物件。當儲存貯體啟用版本控制之後,完成分段上傳一律會建立新的版本。對於未啟用版本控制的儲存貯體,可能優先考慮其他請求,例如在分段上傳啟動後與分段上傳完成前收到的請求。

注意

可能優先考慮其他請求,例如在分段上傳啟動後與分段上傳完成前收到的請求。例如,在您透過金鑰啟動分段上傳後,以及分段上傳完成前,另一個操作可能會刪除該金鑰。若發生此情形,完成的分段上傳回應可能顯示物件建立成功,就算您沒有見到該物件也一樣。

分段上傳保留

分段上傳的所有已上傳組件都存放在儲存貯體上。它們會消耗儲存貯體的儲存空間,直到您完成上傳、停止上傳或上傳逾時為止。分段上傳逾時且會在建立後的 24 小時後刪除分段上傳。當您停止分段上傳或其逾時時,所有上傳的組件都會被刪除,並釋出儲存貯體上消耗的儲存空間。

Amazon Simple Storage Service 分段上傳限制

下表提供分段上傳核心規格。

  • 物件大小上限:5 TB

  • 每次上傳的組件數目上限:10,000

  • 組件編號:1 到 10,000 (含)

  • 組件大小:5 MB (最小值) - 5 GB (最大值)。您的多段上傳的最後一部分沒有大小限制。

  • 列出組件請求的傳回組件數目上限:1,000

  • 列出分段上傳請求中傳回的分段上傳數目上限:1,000

分割要上傳的檔案

使用 Linux 或 Unix 作業系統中的 split 命令,以將檔案分割成多個組件,然後上傳至儲存貯體。您可以在 Windows 作業系統中使用類似的免費軟體應用程式來分割檔案。將檔案分割成多個組件後,請繼續前往本指南的啟動分段上傳一節。

使用 AWS CLI啟動分段上傳

完成下列程序以使用 AWS Command Line Interface (AWS CLI) 啟動分段上傳。您可以使用 create-multipart-upload 命令來執行此動作。若要取得更多資訊,請參閱《指AWS CLI 令參考》create-multipart-upload中的。

注意

您必須先為 Lightsail AWS CLI 和 Amazon S3 安裝並進行設定,然後才能繼續執行此程序。如需詳細資訊,請參閱設 AWS CLI 定使用 Lightsail

  1. 開啟命令提示或終端機視窗。

  2. 輸入下列命令,以建立儲存貯體的分段上傳。

    aws s3api create-multipart-upload --bucket BucketName --key ObjectKey --acl bucket-owner-full-control

    將命令中的以下範例文字取代為自訂文字:

    • BucketName-您要為其建立多部分上傳的值區名稱。

    • ObjectKey-用於您要上傳的檔案的物件金鑰。

    範例:

    aws s3api create-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key sailbot.mp4 --acl bucket-owner-full-control

    您應該會看到類似以下範例的結果。回應包括 UploadID,您必須在後續命令中指定該 ID,以上傳組件並完成此物件的分段上傳。

    create-multipart-upload 命令的結果

    獲得分段上傳的 UploadID 之後,請繼續本指南的使用 AWS CLI上傳分段章節,並開始上傳各分段。

使用上載零件 AWS CLI

完成下列程序以使用 AWS Command Line Interface (AWS CLI) 上傳分段上傳的某分段。您可以使用 upload-part 命令來執行此動作。如需詳細資訊,請參閱《AWS CLI 命令參考》中的 upload-part

注意

您必須先為 Lightsail AWS CLI 和 Amazon S3 安裝並進行設定,然後才能繼續執行此程序。如需詳細資訊,請參閱設 AWS CLI 定使用 Lightsail

  1. 開啟命令提示或終端機視窗。

  2. 輸入下列命令,以將組件上傳至儲存貯體。

    aws s3api upload-part --bucket BucketName --key ObjectKey --part-number Number --body FilePart --upload-id "UploadID" --acl bucket-owner-full-control

    將命令中的以下範例文字取代為自訂文字:

    • BucketName-您要為其建立多部分上傳的值區名稱。

    • ObjectKey-用於您要上傳的檔案的物件金鑰。

    • Number - 您正在上傳之組件的組件編號。組件編號可找出獨特的某個組件,以及其在上傳中物件內的位置。務必隨您上傳的每個組件逐步增加 --part-number 參數。若要這樣做,請在完成分段上傳時,按照 Amazon Simple Storage Service 組裝物件的順序對它們進行編號。

    • FilePart-要從您的計算機上傳的零件文件。

    • UploadID - 您先前依本指南指示建立的分段上傳的上傳 ID。

    範例:

    aws s3api upload-part --bucket DOC-EXAMPLE-BUCKET --key sailbot.mp4 --part-number 1 --body sailbot.mp4.001 --upload-id "R4QU.mO.exampleiHWiLOeNw7JtXX7OotRhTLsXXCzF21CZdYlfj5lfjtiMnpzVw2WPj.exampleBTmL_N_.42.DlHYOTsITFsX.tO3XOUTTAHiCxY5VR8jWRGdkVkUG" --acl bucket-owner-full-control

    您應該會看到類似以下範例的結果。為您上傳的每個組件重複 upload-part 命令。每個上傳組件請求的回應包含您所上傳組件的 ETag 值。為您上傳的每個組件記錄 ETag 值。您需要所有 ETag 值以完成分段上傳,本指南稍後會加以說明。

    upload-part 命令的結果

使用 AWS CLI 列出分段上傳的組件

完成下列程序以使用 AWS Command Line Interface (AWS CLI) 列出分段上傳的各部分。您可以使用 list-parts 命令來執行此動作。如需詳細資訊,請參閱《AWS CLI 命令參考》中的 list-parts

完成此程序以取得在分段上傳中所有己上傳組件的 ETag 值。您需要這些值以完成本指南稍後的分段上傳。不過,如果您從組件上傳的回應記錄所有 ETag 值,則您可以跳過此程序並繼續前往本指南的建立分段上傳 .json 檔案一節。

注意

您必須先為 Lightsail AWS CLI 和 Amazon S3 安裝並進行設定,然後才能繼續執行此程序。如需詳細資訊,請參閱設 AWS CLI 定使用 Lightsail

  1. 開啟命令提示或終端機視窗。

  2. 輸入以下命令以列出儲存貯體上分段上傳的組件。

    aws s3api list-parts --bucket BucketName --key ObjectKey --upload-id "UploadID"

    將命令中的以下範例文字取代為自訂文字:

    • BucketName-您要列出多部分上傳部分的值區名稱。

    • ObjectKey-多部分上傳的物件索引鍵。

    • UploadID - 您先前依本指南指示建立的分段上傳的上傳 ID。

    範例:

    aws s3api list-parts --bucket DOC-EXAMPLE-BUCKET --key sailbot.mp4 --upload-id "R4QU.mO.exampleiHWiLOeNw7JtXX7OotRhTLsXXCzF21CZdYlfj5lfjtiMnpzVw2WPj.exampleBTmL_N_.42.DlHYOTsITFsX.tO3XOUTTAHiCxY5VR8jWRGdkVkUG"

    您應該會看到類似以下範例的結果。回應會列出所有組件編號和在分段上傳中上傳的組件 ETag 值。將這些值複製到剪貼簿,然後繼續前往本指南的建立分段上傳 .json 一節。

    list-part 命令的結果

建立分段上傳 .json 檔案

完成下列程序以建立分段上傳 .json 檔案,該檔案定義您上傳的所有組件及其 ETag 值。本指南中稍後需要此動作才能完成分段上傳。

  1. 開啟文字編輯器,並貼上來自您在本指南之前章節中請求的 list-parts 命令的回應。

    結果應如下列範例所示。

    分段上傳 JSON 檔案編號 1
  2. 重新格式化文字檔案,如下列範例所示:

    分段上傳 JSON 檔案編號 2
  3. 將文字檔案作為 mpstructure.json 儲存到您的電腦,然後繼續前往本指南的使用 AWS CLI 完成分段上傳一節。

使用 AWS CLI 完成分段上傳

完成下列程序以使用 AWS Command Line Interface (AWS CLI) 完成分段上傳。您可以使用 complete-multipart-upload 命令來執行此動作。若要取得更多資訊,請參閱《指AWS CLI 令參考》complete-multipart-upload中的。

注意

您必須先為 Lightsail AWS CLI 和 Amazon S3 安裝並進行設定,然後才能繼續執行此程序。如需詳細資訊,請參閱設 AWS CLI 定使用 Lightsail

  1. 開啟命令提示或終端機視窗。

  2. 輸入下列命令,以將組件上傳至儲存貯體。

    aws s3api complete-multipart-upload --multipart-upload file://JSONFileName --bucket BucketName --key ObjectKey --upload-id "UploadID" --acl bucket-owner-full-control

    將命令中的以下範例文字取代為自訂文字:

    • JSON FileName-您先前在本指南中建立的 .json 檔案的名稱 (例如mpstructure.json)。

    • BucketName-您要完成多部分上傳的值區名稱。

    • ObjectKey-多部分上傳的物件索引鍵。

    • UploadID - 您先前依本指南指示建立的分段上傳的上傳 ID。

    aws s3api complete-multipart-upload --multipart-upload file://mpstructure.json --bucket DOC-EXAMPLE-BUCKET --key sailbot.mp4 --upload-id "R4QU.mO.exampleiHWiLOeNw7JtXX7OotRhTLsXXCzF21CZdYlfj5lfjtiMnpzVw2WPj.exampleBTmL_N_.42.DlHYOTsITFsX.tO3XOUTTAHiCxY5VR8jWRGdkVkUG" --acl bucket-owner-full-control

    您應該會看到類似於以下範例的回應。這可確認分段上傳已完成。物件現在已組裝並可在儲存貯體中使用。

    complete-multipart-upload 命令的結果

使用 AWS CLI 列出儲存貯體的分段上傳

完成下列程序以使用 AWS Command Line Interface (AWS CLI) 列出所有分段上傳。您可以使用 list-multipart-uploads 命令來執行此動作。若要取得更多資訊,請參閱《指AWS CLI 令參考》list-multipart-uploads中的。

注意

您必須先為 Lightsail AWS CLI 和 Amazon S3 安裝並進行設定,然後才能繼續執行此程序。如需詳細資訊,請參閱設 AWS CLI 定使用 Lightsail

  1. 開啟命令提示或終端機視窗。

  2. 輸入下列命令,以將組件上傳至儲存貯體。

    aws s3api list-multipart-uploads --bucket BucketName

    在命令中,BucketName以您要列出所有分段上傳的值區名稱取代。

    範例:

    aws s3api list-multipart-uploads --bucket DOC-EXAMPLE-BUCKET

    您應該會看到類似於以下範例的回應。

    list-multipart-uploads 命令的結果

使用 AWS CLI 停止分段上傳

請完成下列程序,以使用 AWS Command Line Interface (AWS CLI) 停止分段上傳。如果您已啟動分段上傳,但不想再繼續上傳,請執行此操作。您可以使用 abort-multipart-upload 命令來執行此動作。若要取得更多資訊,請參閱《指AWS CLI 令參考》abort-multipart-upload中的。

注意

您必須先為 Lightsail AWS CLI 和 Amazon S3 安裝並進行設定,然後才能繼續執行此程序。如需詳細資訊,請參閱設 AWS CLI 定使用 Lightsail

  1. 開啟命令提示或終端機視窗。

  2. 輸入下列命令,以將組件上傳至儲存貯體。

    aws s3api abort-multipart-upload --bucket BucketName --key ObjectKey --upload-id "UploadID" --acl bucket-owner-full-control

    將命令中的以下範例文字取代為自訂文字:

    • BucketName-您要停止多部分上傳的值區名稱。

    • ObjectKey-多部分上傳的物件索引鍵。

    • UploadID - 您要停止的分段上傳的上傳 ID。

    範例:

    aws s3api abort-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key sailbot.mp4 --upload-id "R4QU.mO.exampleiHWiLOeNw7JtXX7OotRhTLsXXCzF21CZdYlfj5lfjtiMnpzVw2WPj.exampleBTmL_N_.42.DlHYOTsITFsX.tO3XOUTTAHiCxY5VR8jWRGdkVkUG" --acl bucket-owner-full-control

    此命令不會傳回回應。您可以執行 list-multipart-uploads 命令以確認分段上傳已停止。