Carregando arquivos grandes usando o AWS SDK para .NET - Amazon Glacier

Esta página é somente para clientes atuais do serviço Amazon Glacier que usam Vaults e a API REST original de 2012.

Se você estiver procurando por soluções de armazenamento de arquivos, recomendamos usar as classes de armazenamento Amazon Glacier no Amazon S3, S3 Glacier Instant Retrieval, S3 Glacier Flexible Retrieval e S3 Glacier Deep Archive. Para saber mais sobre essas opções de armazenamento, consulte as classes de armazenamento do Amazon Glacier.

O Amazon Glacier (serviço autônomo original baseado em cofre) não aceitará mais novos clientes a partir de 15 de dezembro de 2025, sem impacto para os clientes existentes. O Amazon Glacier é um serviço independente APIs que armazena dados em cofres e é diferente das classes de armazenamento Amazon S3 e Amazon S3 Glacier. Seus dados existentes permanecerão seguros e acessíveis no Amazon Glacier indefinidamente. Nenhuma migração é necessária. Para armazenamento de arquivamento de baixo custo e longo prazo, AWS recomenda as classes de armazenamento Amazon S3 Glacier, que oferecem uma experiência superior ao cliente com APIs base em buckets S3, disponibilidade Região da AWS total, custos mais baixos e integração de serviços. AWS Se você quiser recursos aprimorados, considere migrar para as classes de armazenamento do Amazon S3 Glacier usando AWS nossa orientação de soluções para transferir dados dos cofres do Amazon Glacier para as classes de armazenamento do Amazon S3 Glacier.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Carregando arquivos grandes usando o AWS SDK para .NET

Tanto o alto quanto o baixo nível APIs fornecidos pelo Amazon SDK para .NET fornecem um método para carregar grandes arquivos em partes (consulte). Fazendo o upload de um arquivo no Amazon Glacier

  • A API de nível superior fornece um método que você pode usar para fazer upload de arquivos de qualquer tamanho. Dependendo do arquivo que você está carregando, o método carrega o arquivo em uma única operação ou usa o suporte de upload de várias partes no Amazon Glacier (Amazon Glacier) para carregar o arquivo em partes.

  • A API de nível inferior é mapeada junto à implementação de REST subjacente. Dessa forma, ela fornece um método para fazer upload de arquivos menores em uma operação e um grupo de métodos que dão suporte a multipart upload para arquivos maiores. Esta seção explica como fazer upload de arquivos grandes em partes usando a API de nível inferior.

Para obter mais informações sobre alto e baixo nível APIs, consulte. Usando o AWS SDK para .NET com o Amazon Glacier

Carregando arquivos grandes em partes usando a API de alto nível do AWS SDK para .NET

Você pode usar os mesmos métodos da API de nível superior para fazer upload de arquivos grandes ou pequenos. Com base no tamanho do arquivo, os métodos de API de alto nível decidem se devem carregar o arquivo em uma única operação ou usar a API de upload de várias partes fornecida pelo Amazon Glacier. Para obter mais informações, consulte Fazendo o upload de um arquivo usando a API de alto nível do AWS SDK para .NET.

Carregando arquivos grandes em partes usando a API de baixo nível do AWS SDK para .NET

Para controle granular do upload, você pode usar a API de nível inferior, em que pode configurar a solicitação e processar a resposta. Estas são as etapas para fazer upload de arquivos grandes em partes usando o AWS SDK para .NET.

  1. Crie uma instância da classe AmazonGlacierClient (o cliente).

    Você precisa especificar uma AWS região na qual deseja salvar o arquivo. Todas as operações que você executa usando esse cliente se aplicam a essa AWS região.

  2. Inicie multipart upload chamando o método InitiateMultipartUpload.

    Você precisa fornecer o nome do cofre para o qual deseja fazer upload do arquivo, o tamanho da parte que deseja usar para fazer upload das partes do arquivo e uma descrição opcional. Você precisa fornecer essas informações criando uma instância da classe InitiateMultipartUploadRequest. Em resposta, o Amazon Glacier retorna um ID de upload.

  3. Faça upload de partes chamando o método UploadMultipartPart.

    Para cada parte cujo upload faz, você precisa fornecer o nome do cofre, o intervalo de bytes no arquivo montado final cujo upload será feito nessa parte, a soma de verificação dos dados da parte e o ID de upload.

  4. Conclua o multipart upload chamando o método CompleteMultipartUpload.

    Você precisa fornecer o ID de upload, a soma de verificação de todo o arquivo, o tamanho do arquivo (tamanho combinado de todas as partes cujo upload você fez) e o nome do cofre. O Amazon Glacier constrói o arquivo a partir das peças carregadas e retorna um ID de arquivo.

Exemplo: fazer upload de um arquivo grande em partes usando o Amazon SDK para .NET

O exemplo de código C# a seguir usa o AWS SDK para .NET para carregar um arquivo em um vault ()examplevault. Para step-by-step obter instruções sobre como executar esse exemplo, consulteExecutar exemplos de código. Você precisa atualizar o código conforme mostrado com o nome de um arquivo cujo upload deseja fazer.

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; } } }