Mengunggah Arsip Besar Menggunakan AWS SDK for .NET - Amazon S3 Glacier

Halaman ini hanya untuk pelanggan lama dari layanan S3 Glacier menggunakan Vaults dan asli dari 2012. REST API

Jika Anda mencari solusi penyimpanan arsip, kami sarankan untuk menggunakan kelas penyimpanan S3 Glacier di Amazon S3, Pengambilan Instan Gletser S3, Pengambilan Fleksibel Gletser S3, dan S3 Glacier Deep Archive. Untuk mempelajari lebih lanjut tentang opsi penyimpanan ini, lihat Kelas penyimpanan S3 Glacier dan Penyimpanan data jangka panjang menggunakan kelas penyimpanan S3 Glacier di Panduan Pengguna Amazon S3. Kelas penyimpanan ini menggunakan Amazon S3API, tersedia di semua wilayah, dan dapat dikelola dalam konsol Amazon S3. Mereka menawarkan fitur seperti Analisis Biaya Penyimpanan, Lensa Penyimpanan, fitur enkripsi opsional canggih, dan banyak lagi.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengunggah Arsip Besar Menggunakan AWS SDK for .NET

API tingkat tinggi dan tingkat rendah yang disediakan oleh Amazon SDK for .NET menyediakan metode untuk mengunggah arsip besar dalam beberapa bagian (lihat Mengunggah Arsip di Amazon S3 Glacier).

  • API tingkat tinggi menyediakan metode yang dapat Anda gunakan untuk mengunggah arsip dalam ukuran apa pun. Bergantung pada file yang Anda unggah, metode ini mengunggah arsip dalam satu operasi atau menggunakan dukungan unggahan multipart di Amazon S3 Glacier (S3 Glacier) untuk mengunggah arsip dalam beberapa bagian.

  • API tingkat rendah hampir memetakan ke implementasi REST yang mendasarinya. Dengan demikian, ini menyediakan metode untuk mengunggah arsip yang lebih kecil dalam satu operasi dan grup metode yang mendukung unggahan multipart untuk arsip yang lebih besar. Bagian ini menjelaskan mengunggah arsip besar dalam beberapa bagian menggunakan API tingkat rendah.

Untuk informasi selengkapnya tentang API tingkat tinggi dan tingkat rendah, lihat Menggunakan AWS SDK for .NET dengan Amazon S3 Glacier.

Mengunggah Arsip Besar dalam Beberapa Bagian Menggunakan API Tingkat Tinggi dari AWS SDK for .NET

Anda menggunakan metode API tingkat tinggi yang sama untuk mengunggah arsip kecil atau besar. Berdasarkan ukuran arsip, metode API tingkat tinggi memutuskan apakah akan mengunggah arsip dalam satu operasi atau menggunakan API unggahan multipart yang disediakan oleh S3 Glacier. Untuk informasi selengkapnya, lihat Mengunggah Arsip Menggunakan API Tingkat Tinggi dari AWS SDK for .NET.

Mengunggah Arsip Besar dalam Beberapa Bagian Menggunakan API Tingkat Rendah dari AWS SDK for .NET

Untuk kontrol unggahan granular, Anda dapat menggunakan API tingkat rendah, tempat Anda dapat mengonfigurasi permintaan dan memproses respons. Berikut adalah langkah-langkah untuk mengunggah arsip besar dalam beberapa bagian menggunakan AWS SDK for .NET.

  1. Buat instans dari kelas AmazonGlacierClient (klien).

    Anda harus menentukan Wilayah AWS tempat Anda ingin menyimpan arsip. Semua operasi yang Anda lakukan menggunakan klien ini berlaku untuk Wilayah AWS tersebut.

  2. Mulai unggahan multipart dengan memanggil metode InitiateMultipartUpload.

    Anda perlu memberi nama vault tempat Anda ingin mengunggah arsip, ukuran bagian yang ingin Anda gunakan untuk mengunggah bagian arsip, dan deskripsi opsional. Anda memberikan informasi ini dengan membuat instans kelas InitiateMultipartUploadRequest. Dalam responsnya, S3 Glacier mengembalikan ID unggahan.

  3. Unggah bagian dengan memanggil metode UploadMultipartPart.

    Untuk setiap bagian yang Anda unggah, Anda perlu memberi nama vault, rentang byte dalam gabungan arsip final yang akan diunggah di bagian ini, checksum dari data bagian, dan ID unggahan.

  4. Selesaikan unggahan multipart dengan memanggil metode CompleteMultipartUpload.

    Anda perlu memberikan ID unggahan, checksum dari seluruh arsip, ukuran arsip (ukuran gabungan dari semua bagian yang Anda unggah), dan nama vault. S3 Glacier menyusun arsip dari bagian yang diunggah dan mengembalikan ID arsip.

Contoh: Mengunggah Arsip Besar dalam Beberapa Bagian Menggunakan Amazon SDK for .NET

Contoh kode C# berikut menggunakan AWS SDK for .NET untuk mengunggah arsip ke vault (examplevault). Untuk step-by-step petunjuk tentang cara menjalankan contoh ini, lihatMenjalankan Contoh Kode. Anda perlu memperbarui kode seperti yang ditunjukkan dengan nama file yang ingin Anda unggah.

using System; using System.Collections.Generic; using System.IO; using Amazon.Glacier; using Amazon.Glacier.Model; using Amazon.Runtime; namespace glacier.amazon.com.rproxy.goskope.com.docsamples { class ArchiveUploadMPU { static string vaultName = "examplevault"; static string archiveToUpload = "*** Provide file name (with full path) to upload ***"; static long partSize = 4194304; // 4 MB. public static void Main(string[] args) { AmazonGlacierClient client; List<string> partChecksumList = new List<string>(); try { using (client = new AmazonGlacierClient(Amazon.RegionEndpoint.USWest2)) { Console.WriteLine("Uploading an archive."); string uploadId = InitiateMultipartUpload(client); partChecksumList = UploadParts(uploadId, client); string archiveId = CompleteMPU(uploadId, client, partChecksumList); Console.WriteLine("Archive ID: {0}", archiveId); } Console.WriteLine("Operations successful. To continue, press Enter"); Console.ReadKey(); } catch (AmazonGlacierException e) { Console.WriteLine(e.Message); } catch (AmazonServiceException e) { Console.WriteLine(e.Message); } catch (Exception e) { Console.WriteLine(e.Message); } Console.WriteLine("To continue, press Enter"); Console.ReadKey(); } static string InitiateMultipartUpload(AmazonGlacierClient client) { InitiateMultipartUploadRequest initiateMPUrequest = new InitiateMultipartUploadRequest() { VaultName = vaultName, PartSize = partSize, ArchiveDescription = "Test doc uploaded using MPU." }; InitiateMultipartUploadResponse initiateMPUresponse = client.InitiateMultipartUpload(initiateMPUrequest); return initiateMPUresponse.UploadId; } static List<string> UploadParts(string uploadID, AmazonGlacierClient client) { List<string> partChecksumList = new List<string>(); long currentPosition = 0; var buffer = new byte[Convert.ToInt32(partSize)]; long fileLength = new FileInfo(archiveToUpload).Length; using (FileStream fileToUpload = new FileStream(archiveToUpload, FileMode.Open, FileAccess.Read)) { while (fileToUpload.Position < fileLength) { Stream uploadPartStream = GlacierUtils.CreatePartStream(fileToUpload, partSize); string checksum = TreeHashGenerator.CalculateTreeHash(uploadPartStream); partChecksumList.Add(checksum); // Upload part. UploadMultipartPartRequest uploadMPUrequest = new UploadMultipartPartRequest() { VaultName = vaultName, Body = uploadPartStream, Checksum = checksum, UploadId = uploadID }; uploadMPUrequest.SetRange(currentPosition, currentPosition + uploadPartStream.Length - 1); client.UploadMultipartPart(uploadMPUrequest); currentPosition = currentPosition + uploadPartStream.Length; } } return partChecksumList; } static string CompleteMPU(string uploadID, AmazonGlacierClient client, List<string> partChecksumList) { long fileLength = new FileInfo(archiveToUpload).Length; CompleteMultipartUploadRequest completeMPUrequest = new CompleteMultipartUploadRequest() { UploadId = uploadID, ArchiveSize = fileLength.ToString(), Checksum = TreeHashGenerator.CalculateTreeHash(partChecksumList), VaultName = vaultName }; CompleteMultipartUploadResponse completeMPUresponse = client.CompleteMultipartUpload(completeMPUrequest); return completeMPUresponse.ArchiveId; } } }