Mengunggah Arsip Besar Menggunakan AWS SDK untuk .NET - Amazon Glacier

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

Jika Anda mencari solusi penyimpanan arsip, sebaiknya gunakan kelas penyimpanan Amazon Glacier di Amazon S3, S3 Glacier Instant Retrieval, S3 Glacier Flexible Retrieval, dan S3 Glacier Deep Archive. Untuk mempelajari lebih lanjut tentang opsi penyimpanan ini, lihat kelas penyimpanan Amazon Glacier.

Amazon Glacier (layanan berbasis brankas mandiri asli) tidak akan lagi menerima pelanggan baru mulai 15 Desember 2025, tanpa berdampak pada pelanggan yang sudah ada. Amazon Glacier adalah layanan mandiri dengan miliknya APIs sendiri yang menyimpan data di brankas dan berbeda dari Amazon S3 dan kelas penyimpanan Amazon S3 Glacier. Data Anda yang ada akan tetap aman dan dapat diakses di Amazon Glacier tanpa batas waktu. Tidak diperlukan migrasi. Untuk penyimpanan arsip jangka panjang berbiaya rendah, AWS rekomendasikan kelas penyimpanan Amazon S3 Glacier, yang memberikan pengalaman pelanggan yang unggul dengan APIs berbasis ember S3, ketersediaan penuh, biaya lebih rendah, Wilayah AWS dan integrasi layanan. AWS Jika Anda ingin meningkatkan kemampuan, pertimbangkan untuk bermigrasi ke kelas penyimpanan Amazon S3 Glacier dengan menggunakan Panduan Solusi AWS kami untuk mentransfer data dari kubah Amazon Glacier ke kelas penyimpanan Amazon S3 Glacier.

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 untuk .NET

Baik tingkat tinggi maupun tingkat rendah yang APIs disediakan oleh Amazon SDK for .NET menyediakan metode untuk mengunggah arsip besar di beberapa bagian (lihat). Mengunggah Arsip di Amazon 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 multibagian di Amazon Glacier (Amazon Glacier) untuk mengunggah arsip menjadi 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 lebih lanjut tentang tingkat tinggi dan tingkat rendah APIs, lihat. Menggunakan AWS SDK untuk .NET dengan Amazon Glacier

Mengunggah Arsip Besar di Bagian Menggunakan API Tingkat Tinggi AWS SDK untuk .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 multibagian yang disediakan oleh Amazon Glacier. Untuk informasi selengkapnya, lihat Mengunggah Arsip Menggunakan API Tingkat Tinggi AWS SDK untuk .NET.

Mengunggah Arsip Besar di Bagian Menggunakan API Tingkat Rendah AWS SDK untuk .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 untuk .NET.

  1. Buat instans dari kelas AmazonGlacierClient (klien).

    Anda perlu menentukan AWS Wilayah tempat Anda ingin menyimpan arsip. Semua operasi yang Anda lakukan menggunakan klien ini berlaku untuk AWS Wilayah 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. Sebagai tanggapan, Amazon 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. Amazon Glacier membuat 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 untuk .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.govskope.ca.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; } } }