Cette page est réservée aux clients existants du service S3 Glacier utilisant Vaults et l'original REST API de 2012.
Si vous recherchez des solutions de stockage d'archives, nous vous conseillons d'utiliser les classes de stockage S3 Glacier dans Amazon S3, S3 Glacier Instant Retrieval, S3 Glacier Flexible Retrieval et S3 Glacier Deep Archive. Pour en savoir plus sur ces options de stockage, consultez les sections Classes de stockage S3 Glacier
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Chargement d'archives volumineuses à l'aide du kit AWS SDK for .NET
Les API de haut et bas niveau fournies par le kit SDK Amazon pour .NET proposent une méthode permettant de charger les archives volumineuses en différentes parties (voir Chargement d'une archive dans Amazon S3 Glacier).
-
L'API de haut niveau fournit une méthode que vous pouvez utiliser pour charger des archives de n'importe quelle taille. Selon le fichier que vous chargez, la méthode charge l'archive en une seule opération ou utilise le chargement partitionné pris en charge par Amazon S3 Glacier (S3 Glacier) de façon à charger l'archive en plusieurs parties.
-
L'API de bas niveau est mappée étroitement à l'implémentation REST sous-jacente. Par conséquent, elle fournit une méthode pour charger des archives plus petites en une seule opération et un groupe de méthodes qui prennent en charge le chargement partitionné en plusieurs parties pour les archives plus volumineuses. Cette section explique le chargement des archives volumineuses en plusieurs parties à l'aide de l'API de bas niveau.
Pour plus d'informations sur les API de haut niveau et de bas niveau, consultez Utilisation d'AWS SDK for .NET avec Amazon S3 Glacier.
Rubriques
Chargement d'archives volumineuses en plusieurs parties à l'aide de l'API de haut niveau du kit AWS SDK for .NET
Vous utilisez les mêmes méthodes de l'API de haut niveau pour charger les archives petites ou volumineuses. Selon la taille de l'archive, les méthodes d'API de haut niveau décident de charger l'archive en une seule opération ou d'utiliser l'API de chargement partitionné fournie par S3 Glacier. Pour de plus amples informations, veuillez consulter Chargement d'une archive à l'aide de l'API de haut niveau du kit AWS SDK for .NET.
Chargement d'archives volumineuses en plusieurs parties à l'aide de l'API de bas niveau du kit AWS SDK for .NET
Pour bénéficier d'un contrôle précis du chargement, vous pouvez utiliser l'API de bas niveau afin de configurer la demande et traiter la réponse. Voici les étapes pour charger des archives volumineuses en plusieurs parties à l'aide du kit AWS SDK for .NET.
-
Créez une instance de la classe
AmazonGlacierClient
(le client).Vous devez spécifier la région AWS dans laquelle vous souhaitez enregistrer l'archive. Toutes les opérations que vous effectuez à l'aide de ce client s'appliquent à cette région AWS.
-
Lancez un téléchargement partitionné en appelant la méthode
InitiateMultipartUpload
.Vous devez fournir le nom du coffre dans lequel vous souhaitez charger l'archive, spécifier la taille des parties de l'archive à charger et indiquer éventuellement une description. Vous fournissez ces informations en créant une instance de la classe
InitiateMultipartUploadRequest
. En réponse, S3 Glacier renvoie un ID de chargement. -
Chargez les parties en appelant la méthode
UploadMultipartPart
.Pour chaque partie que vous chargez, vous devez fournir le nom du coffre, la plage d'octets dans l'archive assemblée finale qui sera chargée dans cette partie, le total de contrôle des données de la partie et l'ID du chargement.
-
Terminez le chargement partitionné en appelant la méthode
CompleteMultipartUpload
.Vous devez fournir l'ID de chargement, le total de contrôle de l'archive entière, la taille de l'archive (taille combinée de toutes les parties que avez chargées) et le nom du coffre. S3 Glacier construit l'archive à partir des parties chargées et renvoie un ID d'archive.
Exemple : Chargement d'une archive volumineuse en plusieurs parties à l'aide du kit SDK Amazon pour .NET
L'exemple de code C# suivant utilise le kit AWS SDK for .NET pour charger une archive dans un coffre (examplevault
). Pour obtenir les instructions étape par étape permettant d'exécuter cet exemple, consultez la section Exemples de code en cours d'exécution. Vous devez mettre à jour le code tel qu'il est présenté avec le nom d'un fichier que vous souhaitez charger.
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; } } }