使用 AWS SDK for Java 在單一操作中上傳封存 - Amazon S3 Glacier

此頁面僅適用於使用文件庫的 S3 Glacier 服務的現有客戶,並且是 2012 年RESTAPI起的原始客戶。

如果您正在尋找存檔儲存解決方案,我們建議您使用 Amazon S3 中的 S3 Glacier 儲存類別、S3 冰川即時擷取S3 冰川彈性擷取和 S3 Glacier Deep Archive。若要進一步了解這些儲存選項,請參閱 Amazon S3 使用者指南中的 S3 Glacier 儲存類別和使用 S3 Glacier 儲存類別的長期資料儲存。這些儲存類別使用 Amazon S3API,可在所有區域使用,並且可以在 Amazon S3 主控台中管理。它們提供了諸如存儲成本分析,存儲鏡頭,高級可選加密功能等功能。

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

使用 AWS SDK for Java 在單一操作中上傳封存

適用於 Java 的 Amazon 開發套件提供的高階和低階 API 都提供了上傳封存的方法。

使用 AWS SDK for Java 的高階 API 上傳封存

高階 API 的 ArchiveTransferManager 類別提供 upload 方法,可以使用該方法將存檔上傳到文件庫。

注意

您可以使用 upload 方法上傳小型或大型封存。根據您要上傳的封存大小,此方法會判斷在單一操作上傳,或使用分段上傳 API 將封存分成部分上傳。

範例:使用 AWS SDK for Java 的高階 API 上傳封存

以下 Java 程式碼範例將封存上傳到美國西部 (奧勒岡) 區域 (us-west-2) 中的文件庫 (examplevault)。如需支援 AWS 區域和端點的清單,請參閱存取 Amazon S3 Glacier

如需執行此範例的逐步說明,請參閱 使用 Eclipse 執行 Amazon S3 Glacier 的 Java 範例。您需要更新程式碼,如所示的要上傳的文件庫名稱和要上傳的檔案名稱。

import java.io.File; import java.io.IOException; import java.util.Date; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.glacier.AmazonGlacierClient; import com.amazonaws.services.glacier.transfer.ArchiveTransferManager; import com.amazonaws.services.glacier.transfer.UploadResult; public class ArchiveUploadHighLevel { public static String vaultName = "*** provide vault name ***"; public static String archiveToUpload = "*** provide name of file to upload ***"; public static AmazonGlacierClient client; public static void main(String[] args) throws IOException { ProfileCredentialsProvider credentials = new ProfileCredentialsProvider(); client = new AmazonGlacierClient(credentials); client.setEndpoint("https://glacier.us-west-2.amazonaws.com/"); try { ArchiveTransferManager atm = new ArchiveTransferManager(client, credentials); UploadResult result = atm.upload(vaultName, "my archive " + (new Date()), new File(archiveToUpload)); System.out.println("Archive ID: " + result.getArchiveId()); } catch (Exception e) { System.err.println(e); } } }

使用 AWS SDK for Java 的低階 API 在單一操作中上傳封存

低階 API 提供所有封存操作的方法。以下是使用 AWS SDK for Java 上傳封存的步驟。

  1. 建立 AmazonGlacierClient 類別的執行個體 (用戶端)。

    您需要指定要上傳封存的 AWS 區域。所有您使用此用戶端執行的操作均會套用到該 AWS 區域。

  2. 您可以透過建立 UploadArchiveRequest 類別的執行個體來提供請求資訊。

    除了要上傳的資料外,還需要提供承載的檢查總和 (SHA-256 樹狀雜湊)、文件庫名稱、資料的內容長度和帳戶 ID。

    如果您不提供帳戶 ID,則會使用與您提供來簽署請求之登入資料關聯的帳戶 ID。如需更多詳細資訊,請參閱 將 AWS SDK for Java 與 Amazon S3 Glacier 搭配使用

  3. 以參數形式提供請求物件,以便執行 uploadArchive 方法。

    Amazon S3 Glacier (S3 Glacier) 會在回應中,傳回剛上傳封存的封存 ID。

下列 Java 程式碼片段描述前述步驟。

AmazonGlacierClient client; UploadArchiveRequest request = new UploadArchiveRequest() .withVaultName("*** provide vault name ***") .withChecksum(checksum) .withBody(new ByteArrayInputStream(body)) .withContentLength((long)body.length); UploadArchiveResult uploadArchiveResult = client.uploadArchive(request); System.out.println("Location (includes ArchiveID): " + uploadArchiveResult.getLocation());

範例:使用 AWS SDK for Java 的低階 API 在單一操作中上傳封存

以下 Java 程式碼範例使用 AWS SDK for Java 將存檔上傳到文件庫 (examplevault)。如需執行此範例的逐步說明,請參閱 使用 Eclipse 執行 Amazon S3 Glacier 的 Java 範例。您需要更新程式碼,如所示的要上傳的文件庫名稱和要上傳的檔案名稱。

import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.glacier.AmazonGlacierClient; import com.amazonaws.services.glacier.TreeHashGenerator; import com.amazonaws.services.glacier.model.UploadArchiveRequest; import com.amazonaws.services.glacier.model.UploadArchiveResult; public class ArchiveUploadLowLevel { public static String vaultName = "*** provide vault name ****"; public static String archiveFilePath = "*** provide to file upload ****"; public static AmazonGlacierClient client; public static void main(String[] args) throws IOException { ProfileCredentialsProvider credentials = new ProfileCredentialsProvider(); client = new AmazonGlacierClient(credentials); client.setEndpoint("https://glacier.us-east-1.amazonaws.com/"); try { // First open file and read. File file = new File(archiveFilePath); InputStream is = new FileInputStream(file); byte[] body = new byte[(int) file.length()]; is.read(body); // Send request. UploadArchiveRequest request = new UploadArchiveRequest() .withVaultName(vaultName) .withChecksum(TreeHashGenerator.calculateTreeHash(new File(archiveFilePath))) .withBody(new ByteArrayInputStream(body)) .withContentLength((long)body.length); UploadArchiveResult uploadArchiveResult = client.uploadArchive(request); System.out.println("ArchiveID: " + uploadArchiveResult.getArchiveId()); } catch (Exception e) { System.err.println("Archive not uploaded."); System.err.println(e); } } }