

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

# 透過分段上傳將檔案上傳到 Lightsail 儲存貯體
<a name="amazon-lightsail-uploading-files-to-a-bucket-using-multipart-upload"></a>

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

使用分段上傳具備下列優勢：
+ 改善傳輸量 - 您可平行上傳各組件以改進傳輸量。
+ 快速從任何網路問題復原 - 組件大小若較小，對於重新開始因為網路發生錯誤而上傳失敗的影響可降到最低。
+ 隨時間上傳 - 您可以隨時間上傳檔案組件。啟動分段上傳之後，您有 24 小時完成分段上傳。
+ 在您知道最終檔案大小前開始上傳 - 您可在建立檔案的同時上傳它。

建議您依照下列方式使用分段上傳：
+ 若您透過穩定的高頻寬網路上傳大型檔案，使用分段上傳可同時上傳多個檔案組件以取得多執行緒效能，因而完全善用可用的頻寬使用量。
+ 若是透過不穩定的網路進行上傳，使用分段上傳可避免上傳重新開始，因而此更快從網路故障中復原。使用分段上傳時，只有組件中斷才需要重試上傳。不需要重新開始或再次上傳整個檔案。

**內容**
+ [分段上傳程序](#mutipart-upload-process)
+ [並行分段上傳操作](#concurrent-multipart-upload-operations)
+ [分段上傳保留](#multipart-upload-retention)
+ [Amazon Simple Storage Service 分段上傳限制](#multipart-upload-limits)
+ [分割要上傳的檔案](#split-the-file-to-upload)
+ [使用 啟動分段上傳 AWS CLI](#initiate-multipart-upload)
+ [使用 上傳組件 AWS CLI](#upload-a-part)
+ [使用 列出分段上傳的部分 AWS CLI](#list-parts-of-multipart-upload)
+ [建立分段上傳 .json 檔案](#create-multipart-upload-json-file)
+ [使用 完成分段上傳 AWS CLI](#complete-multipart-upload)
+ [使用 列出儲存貯體的分段上傳 AWS CLI](#list-multipart-uploads)
+ [使用 AWS CLI停止分段上傳](#stop-multipart-uploads)

## 分段上傳程序
<a name="mutipart-upload-process"></a>

分段上傳是一個包含三步驟的程序，它使用 Amazon S3 動作將檔案上傳至 Lightsail 中的儲存貯體：

1. 您可以使用 [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) 動作啟動分段上傳。

1. 您可以使用 [UploadPart](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html) 動作上傳檔案組件。

1. 您可以使用 [CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html) 動作完成分段上傳。

**注意**  
您可以在使用 [AbortMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html) 動作啟動分段上傳之後再停用它。

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

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

**啟動分段上傳**

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

**組件上傳**

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

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

**注意**  
分段上傳的所有已上傳組件都存放在儲存貯體上。它們會消耗儲存貯體的儲存空間，直到您完成上傳、停止上傳或上傳逾時為止。如需詳細資訊，請參閱本指南稍後的[分段上傳保留](#multipart-upload-retention)。

**完成分段上傳**

當您完成分段上傳時，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 值時，維持您自己的分段編號清單。

## 並行分段上傳操作
<a name="concurrent-multipart-upload-operations"></a>

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

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

## 分段上傳保留
<a name="multipart-upload-retention"></a>

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

## Amazon Simple Storage Service 分段上傳限制
<a name="multipart-upload-limits"></a>

下表提供分段上傳核心規格。
+ 物件大小上限：50 TB
+ 每次上傳的組件數目上限：10,000
+ 組件編號：1 到 10,000 (含)
+ 組件大小：5 MB (最小值) - 5 GB (最大值)。您的多段上傳的最後一部分沒有大小限制。
+ 列出組件請求的傳回組件數目上限：1,000
+ 列出分段上傳請求中傳回的分段上傳數目上限：1,000

## 分割要上傳的檔案
<a name="split-the-file-to-upload"></a>

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

## 使用 啟動分段上傳 AWS CLI
<a name="initiate-multipart-upload"></a>

完成下列程序以使用 AWS Command Line Interface (AWS CLI) 啟動分段上傳。您可以使用 `create-multipart-upload` 命令來執行此動作。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 [create-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/create-multipart-upload.html)。

**注意**  
您必須安裝 AWS CLI 並為 Lightsail和 Amazon S3 設定它，才能繼續此程序。如需詳細資訊，請參閱[設定 AWS CLI 以使用 Lightsail](lightsail-how-to-set-up-and-configure-aws-cli.md)。

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

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

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

   在該命令中，將以下範例文字取代為自訂文字：
   + *BucketName* - 您要建立分段上傳之儲存貯體的名稱。
   + *ObjectKey* - 用於上傳檔案的物件金鑰。

   範例：

   ```
   aws s3api create-multipart-upload --bucket amzn-s3-demo-bucket --key sailbot.mp4 --acl bucket-owner-full-control
   ```

   您應該會看到類似以下範例的結果。回應包括 `UploadID`，您必須在後續命令中指定該 ID，以上傳組件並完成此物件的分段上傳。  
![\[create-multipart-upload 命令的結果\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/amazon-lightsail-s3api-create-multipart-upload-result.png)

   獲得分段上傳的 `UploadID` 之後，請繼續本指南的[使用 AWS CLI上傳分段](#upload-a-part)章節，並開始上傳各分段。

## 使用 上傳組件 AWS CLI
<a name="upload-a-part"></a>

完成下列程序以使用 AWS Command Line Interface (AWS CLI) 上傳分段上傳的某分段。您可以使用 `upload-part` 命令來執行此動作。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)。

**注意**  
您必須安裝 AWS CLI 並為 Lightsail和 Amazon S3 設定它，才能繼續此程序。如需詳細資訊，請參閱[設定 AWS CLI 以使用 Lightsail](lightsail-how-to-set-up-and-configure-aws-cli.md)。

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

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

   ```
   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 amzn-s3-demo-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 命令的結果\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/amazon-lightsail-s3api-upload-part-result.png)

## 使用 AWS CLI 列出分段上傳的組件
<a name="list-parts-of-multipart-upload"></a>

完成下列程序以使用 AWS Command Line Interface (AWS CLI) 列出分段上傳的各部分。您可以使用 `list-parts` 命令來執行此動作。如需詳細資訊，請參閱*《AWS CLI 命令參考》*中的 [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)。

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

**注意**  
您必須安裝 AWS CLI 並為 Lightsail和 Amazon S3 設定它，才能繼續此程序。如需詳細資訊，請參閱[設定 AWS CLI 以使用 Lightsail](lightsail-how-to-set-up-and-configure-aws-cli.md)。

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

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

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

   在該命令中，將以下範例文字取代為自訂文字：
   + *BucketName* - 您要列出分段上傳組件之儲存貯體的名稱。
   + *ObjectKey* - 分段上傳的物件金鑰。
   + *UploadID* - 您先前依本指南指示建立的分段上傳的上傳 ID。

   範例：

   ```
   aws s3api list-parts --bucket amzn-s3-demo-bucket --key sailbot.mp4 --upload-id "R4QU.mO.exampleiHWiLOeNw7JtXX7OotRhTLsXXCzF21CZdYlfj5lfjtiMnpzVw2WPj.exampleBTmL_N_.42.DlHYOTsITFsX.tO3XOUTTAHiCxY5VR8jWRGdkVkUG"
   ```

   您應該會看到類似以下範例的結果。回應會列出所有組件編號和在分段上傳中上傳的組件 `ETag` 值。將這些值複製到剪貼簿，然後繼續前往本指南的[建立分段上傳 .json](#create-multipart-upload-json-file) 一節。  
![\[list-part 命令的結果\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/amazon-lightsail-s3api-list-parts-result.png)

## 建立分段上傳 .json 檔案
<a name="create-multipart-upload-json-file"></a>

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

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

   結果應如下列範例所示。  
![\[分段上傳 JSON 檔案編號 1\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/amazon-lightsail-multipart-upload-json-file-1.png)

1. 重新格式化文字檔案，如下列範例所示：  
![\[分段上傳 JSON 檔案編號 2\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/amazon-lightsail-multipart-upload-json-file-2.png)

1. 將文字檔案作為 `mpstructure.json` 儲存到您的電腦，然後繼續前往本指南的[使用 AWS CLI 完成分段上傳](#complete-multipart-upload)一節。

## 使用 AWS CLI 完成分段上傳
<a name="complete-multipart-upload"></a>

完成下列程序以使用 AWS Command Line Interface (AWS CLI) 完成分段上傳。您可以使用 `complete-multipart-upload` 命令來執行此動作。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)。

**注意**  
您必須安裝 AWS CLI 並為 Lightsail和 Amazon S3 設定它，才能繼續此程序。如需詳細資訊，請參閱[設定 AWS CLI 以使用 Lightsail](lightsail-how-to-set-up-and-configure-aws-cli.md)。

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

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

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

   在該命令中，將以下範例文字取代為自訂文字：
   + *JSONFileName* - 您先前依本指南指示建立的 .json 檔案名稱 (例如 `mpstructure.json`)。
   + *BucketName* - 您要完成分段上傳之儲存貯體的名稱。
   + *ObjectKey* - 分段上傳的物件金鑰。
   + *UploadID* - 您先前依本指南指示建立的分段上傳的上傳 ID。

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

   您應該會看到類似於以下範例的回應。這可確認分段上傳已完成。物件現在已組裝並可在儲存貯體中使用。  
![\[complete-multipart-upload 命令的結果\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/amazon-lightsail-s3api-complete-multipart-upload-result.png)

## 使用 AWS CLI 列出儲存貯體的分段上傳
<a name="list-multipart-uploads"></a>

完成下列程序以使用 AWS Command Line Interface (AWS CLI) 列出所有分段上傳。您可以使用 `list-multipart-uploads` 命令來執行此動作。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 [list-multipart-uploads](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-multipart-uploads.html)。

**注意**  
您必須安裝 AWS CLI 並為 Lightsail和 Amazon S3 設定它，才能繼續此程序。如需詳細資訊，請參閱[設定 AWS CLI 以使用 Lightsail](lightsail-how-to-set-up-and-configure-aws-cli.md)。

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

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

   ```
   aws s3api list-multipart-uploads --bucket BucketName
   ```

   在命令中，將 *BucketName* 替換成您要列出所有分段上傳之儲存貯體的名稱。

   範例：

   ```
   aws s3api list-multipart-uploads --bucket amzn-s3-demo-bucket
   ```

   您應該會看到類似於以下範例的回應。  
![\[list-multipart-uploads 命令的結果\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/amazon-lightsail-s3api-list-multipart-uploads-result.png)

## 使用 AWS CLI 停止分段上傳
<a name="stop-multipart-uploads"></a>

完成下列程序，以使用 AWS Command Line Interface () 停止分段上傳AWS CLI。如果您已啟動分段上傳，但不想再繼續上傳，請執行此操作。您可以使用 `abort-multipart-upload` 命令來執行此動作。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)。

**注意**  
您必須安裝 AWS CLI 並為 Lightsail和 Amazon S3 設定它，才能繼續此程序。如需詳細資訊，請參閱[設定 AWS CLI 以使用 Lightsail](lightsail-how-to-set-up-and-configure-aws-cli.md)。

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

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

   ```
   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 amzn-s3-demo-bucket --key sailbot.mp4 --upload-id "R4QU.mO.exampleiHWiLOeNw7JtXX7OotRhTLsXXCzF21CZdYlfj5lfjtiMnpzVw2WPj.exampleBTmL_N_.42.DlHYOTsITFsX.tO3XOUTTAHiCxY5VR8jWRGdkVkUG" --acl bucket-owner-full-control
   ```

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