

 **Esta página destina-se somente a clientes atuais do serviço Amazon Glacier que usam cofres e a API REST original de 2012.**

Se você estiver procurando soluções de armazenamento de arquivos do Amazon Glacier, recomendamos usar as classes de armazenamento do 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 [Classes de armazenamento do Amazon Glacier](https://aws.amazon.com/s3/storage-classes/glacier/).

O Amazon Glacier (serviço autônomo original baseado em cofre) não está mais aceitando novos clientes. 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](https://aws.amazon.com/s3/storage-classes/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 nossas [Orientações de soluções da AWS para transferir dados dos cofres do Amazon Glacier para as classes de armazenamento do Amazon S3 Glacier](https://aws.amazon.com/solutions/guidance/data-transfer-from-amazon-s3-glacier-vaults-to-amazon-s3/).

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á.

# Carregar um arquivo no Amazon Glacier
<a name="uploading-an-archive"></a>

O Amazon Glacier fornece um console de gerenciamento que você pode usar para criar e excluir cofres. No entanto, não é possível fazer upload de arquivos para o Amazon Glacier usando o console de gerenciamento. Para fazer upload de dados, como fotos, vídeos e outros documentos, você deve usar o código AWS CLI ou escrever o código para fazer solicitações, usando diretamente a API REST ou usando a Amazon SDKs. 

Para obter informações sobre o uso do Amazon Glacier com o AWS CLI, acesse [AWS CLI Referência do Amazon Glacier.](https://docs.aws.amazon.com/cli/latest/reference/glacier/index.html) Para instalar o AWS CLI, acesse [AWS Command Line Interface](https://aws.amazon.com/cli/). Os tópicos **Fazer upload** a seguir descrevem como fazer upload de arquivos para o Amazon Glacier usando o Amazon SDK para Java, o Amazon SDK para .NET e a API REST.

**Topics**
+ [Opções de upload de um arquivo para o Amazon Glacier](#uploading-an-archive-overview)
+ [Fazer upload de um arquivo em uma única operação](uploading-archive-single-operation.md)
+ [Fazer upload de arquivos grandes em partes (Multipart Upload)](uploading-archive-mpu.md)

## Opções de upload de um arquivo para o Amazon Glacier
<a name="uploading-an-archive-overview"></a>

Dependendo do tamanho de dados que estão no upload, o Amazon Glacier oferece as seguintes opções: 
+ **Fazer upload de arquivos em uma única operação** – Em uma única operação, você pode fazer upload de arquivos de 1 byte até 4 GB. No entanto, recomendamos que os clientes do Amazon Glacier usem Upload Multiparte para fazer upload de arquivos maiores que 100 MB. Para obter mais informações, consulte [Fazer upload de um arquivo em uma única operação](uploading-archive-single-operation.md).
+ **Fazer upload de arquivos em partes** – Usando a multipart upload API, você pode fazer upload de arquivos grandes de até aproximadamente 40.000 GB (10.000 \$1 4 GB). 

  A chamada da API de multipart upload foi projetada para melhorar a experiência de upload para arquivos maiores. Você pode fazer upload de arquivos em partes. O upload dessas partes pode ser feito de maneira independente, em qualquer ordem, e em paralelo. Em caso de falha de um upload da parte, você precisa refazer upload dessa parte, e não de todo o arquivo. Você pode usar um multipart upload para arquivos de 1 byte até aproximadamente 40.000 GB. Para obter mais informações, consulte [Fazer upload de arquivos grandes em partes (Multipart Upload)](uploading-archive-mpu.md).

**Importante**  
O inventário de cofre do Amazon Glacier é atualizado somente uma vez por dia. Ao fazer upload de um arquivo, você não verá imediatamente o novo arquivo adicionado ao cofre (no console ou na lista de inventários de cofre obtido por download) até o inventário de cofre ter sido atualizado.

### Usando o AWS Snowball Edge serviço
<a name="using-import-export-service-for-glacier"></a>

AWS Snowball Edge acelera a transferência de grandes quantidades de dados para dentro e para fora do AWS uso de dispositivos de propriedade da Amazon, contornando a Internet. Para obter mais informações, consulte a página de detalhes do [AWS Snowball Edge](https://aws.amazon.com/snowball). 

Para fazer upload de dados existentes para o Amazon Glacier, considere usar um dos tipos de dispositivo de AWS Snowball Edge para importar dados para o Amazon S3, e movê-los para a classe de armazenamento do Amazon Glacier para fins de arquivamento usando regras de ciclo de vida. Quando você faz a transição de objetos do Amazon S3 para a classe de armazenamento do Amazon Glacier, o Amazon S3 usa internamente o Amazon Glacier no armazenamento durável por um custo menor. Embora os objetos sejam armazenados no Amazon Glacier, eles continuam sendo objetos do Amazon S3 que você gerencia no Amazon S3, e não é possível acessá-los diretamente por meio do Amazon Glacier.

Para obter mais informações sobre a configuração do ciclo de vida do Amazon S3 e a transição de objetos para a classe de armazenamento do Amazon Glacier, consulte [Gerenciamento do ciclo de vida de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) e [Transição de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html) no *Guia do usuário do Amazon Simple Storage Service*.

# Fazer upload de um arquivo em uma única operação
<a name="uploading-archive-single-operation"></a>

Conforme descrito em [Carregar um arquivo no Amazon Glacier](uploading-an-archive.md), você pode fazer upload de arquivos menores em uma única operação. No entanto, recomendamos que os clientes do Amazon Glacier usem Upload Multiparte para fazer upload de arquivos maiores que 100 MB. 

**Topics**
+ [Carregando um arquivo em uma única operação usando o AWS Command Line Interface](uploading-an-archive-single-op-using-cli.md)
+ [Carregando um arquivamento em uma única operação usando o AWS SDK para Java](uploading-an-archive-single-op-using-java.md)
+ [Carregando um arquivo em uma única operação usando o AWS SDK para .NET no Amazon Glacier](uploading-an-archive-single-op-using-dotnet.md)
+ [Fazer upload de um arquivo em uma única operação usando a API REST](uploading-an-archive-single-op-using-rest.md)

# Carregando um arquivo em uma única operação usando o AWS Command Line Interface
<a name="uploading-an-archive-single-op-using-cli"></a>

Você pode fazer upload de um arquivo no Amazon Glacier (Amazon Glacier) usando AWS Command Line Interface o ().AWS CLI

**Topics**
+ [(Pré-requisito) Configurando o AWS CLI](#Creating-Vaults-CLI-Setup)
+ [Exemplo: Carregar um arquivo usando o AWS CLI](#Uploading-Archives-CLI-Implementation)

## (Pré-requisito) Configurando o AWS CLI
<a name="Creating-Vaults-CLI-Setup"></a>

1. Faça download e configure a AWS CLI. Para obter instruções, consulte os seguintes tópicos no *Guia do usuário do AWS Command Line Interface *: 

    [Instalando o AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) 

   [Configurando o AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

1. Verifique sua AWS CLI configuração inserindo os seguintes comandos no prompt de comando. Esses comandos não fornecem as credenciais explicitamente, de modo que as credenciais do perfil padrão são usadas.
   + Tente usar o comando de ajuda.

     ```
     aws help
     ```
   + Para obter uma lista dos cofres do Amazon Glacier na conta configurada, use o comando `list-vaults`. *123456789012*Substitua pelo seu Conta da AWS ID.

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + Para ver os dados de configuração atuais do AWS CLI, use o `aws configure list` comando.

     ```
     aws configure list
     ```

## Exemplo: Carregar um arquivo usando o AWS CLI
<a name="Uploading-Archives-CLI-Implementation"></a>

Para fazer o upload de um arquivo, você deve ter um cofre criado. Para obter mais informações sobre a criação de cofres, consulte [Criar um cofre no Amazon Glacier](creating-vaults.md).

1. Use o comando `upload-archive` para adicionar um arquivo a um cofre existente. No exemplo abaixo, substitua `vault name` e `account ID`. Para o parâmetro `body`, especifique um caminho para o arquivo que você deseja carregar.

   ```
   aws glacier upload-archive --vault-name awsexamplevault --account-id 123456789012 --body archive.zip
   ```

1.  Saída esperada:

   ```
   {
       "archiveId": "kKB7ymWJVpPSwhGP6ycSOAekp9ZYe_--zM_mw6k76ZFGEIWQX-ybtRDvc2VkPSDtfKmQrj0IRQLSGsNuDp-AJVlu2ccmDSyDUmZwKbwbpAdGATGDiB3hHO0bjbGehXTcApVud_wyDw",
       "checksum": "969fb39823836d81f0cc028195fcdbcbbe76cdde932d4646fa7de5f21e18aa67",
       "location": "/123456789012/vaults/awsexamplevault/archives/kKB7ymWJVpPSwhGP6ycSOAekp9ZYe_--zM_mw6k76ZFGEIWQX-ybtRDvc2VkPSDtfKmQrj0IRQLSGsNuDp-AJVlu2ccmDSyDUmZwKbwbpAdGATGDiB3hHO0bjbGehXTcApVud_wyDw"
   }
   ```

   Quando concluído, o comando exibirá o ID do arquivo, a soma de verificação e a localização no Amazon Glacier. Para obter mais informações sobre o comando upload-arquivo, consulte [upload-arquivo](https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-archive.html) na *Referência de comandos da AWS CLI *.

# Carregando um arquivamento em uma única operação usando o AWS SDK para Java
<a name="uploading-an-archive-single-op-using-java"></a>

Tanto o [alto quanto o baixo nível APIs](using-aws-sdk.md) fornecidos pelo Amazon SDK for Java fornecem um método para carregar um arquivo.

**Topics**
+ [Fazendo o upload de um arquivo usando a API de alto nível do AWS SDK para Java](#uploading-an-archive-single-op-high-level-using-java)
+ [Carregando um arquivo em uma única operação usando a API de baixo nível do AWS SDK para Java](#uploading-an-archive-single-op-low-level-using-java)

## Fazendo o upload de um arquivo usando a API de alto nível do AWS SDK para Java
<a name="uploading-an-archive-single-op-high-level-using-java"></a>

A classe `ArchiveTransferManager` da API de nível superior fornece o método `upload`, que você pode usar para fazer upload de um arquivo em um cofre.

 

**nota**  
Você pode usar o método `upload` para fazer upload de arquivos grandes ou pequenos. Dependendo do tamanho do arquivo que você estiver fazendo upload, esse método determina se é necessário fazer upload dele em uma única operação ou usar a multipart upload API para fazer upload do arquivo em partes.

### Exemplo: fazer o upload de um arquivo usando a API de alto nível do AWS SDK para Java
<a name="upload-archive-high-level-java-example"></a>

O exemplo de código Java a seguir faz upload de um arquivo em um cofre (`examplevault`) na Região (`us-west-2`) Oeste dos EUA (Oregon). Para obter uma lista de AWS regiões e endpoints compatíveis, consulte[Acessar o Amazon Glacier](amazon-glacier-accessing.md). 

Para step-by-step obter instruções sobre como executar esse exemplo, consulte[Executar exemplos do Java para o Amazon Glacier usando o Eclipse](using-aws-sdk-for-java.md#setting-up-and-testing-sdk-java). É preciso atualizar o código conforme mostrado com o nome do cofre cujo upload você deseja fazer e o nome do arquivo cujo upload quer fazer.

**Example**  

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

## Carregando um arquivo em uma única operação usando a API de baixo nível do AWS SDK para Java
<a name="uploading-an-archive-single-op-low-level-using-java"></a>

A API de nível inferior fornece métodos para todas as operações de arquivo. Veja a seguir as etapas para carregar um arquivo usando o AWS SDK para Java.

 

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

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

1. Forneça informações sobre a solicitação criando uma instância da classe `UploadArchiveRequest`.

   Além dos dados cujo upload deseja fazer, você precisa fornecer uma soma de verificação (hash de árvore SHA-256) da carga útil, o nome do cofre, o tamanho do conteúdo dos dados e o ID da conta. 

   Se você não fornecer um ID da conta, o ID da conta associado às credenciais fornecidas por você para assinar a solicitação será pressuposto. Para obter mais informações, consulte [Usando o AWS SDK para Java com o Amazon Glacier](using-aws-sdk-for-java.md). 

1. Execute o método `uploadArchive` fornecendo o objeto de solicitação como um parâmetro. 

   Em resposta, o Amazon Glacier retorna um ID do arquivo recém-carregado. 

O trecho de código Java a seguir ilustra as etapas anteriores. 

```
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());
```

### Exemplo: fazer upload de um arquivo em uma única operação usando a API de baixo nível do AWS SDK para Java
<a name="uploding-single-archive-using-java-example"></a>

O exemplo de código Java a seguir usa o AWS SDK para Java para carregar um arquivo em um vault (`examplevault`). Para step-by-step obter instruções sobre como executar esse exemplo, consulte[Executar exemplos do Java para o Amazon Glacier usando o Eclipse](using-aws-sdk-for-java.md#setting-up-and-testing-sdk-java). É preciso atualizar o código conforme mostrado com o nome do cofre cujo upload você deseja fazer e o nome do arquivo cujo upload quer fazer.

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

# Carregando um arquivo em uma única operação usando o AWS SDK para .NET no Amazon Glacier
<a name="uploading-an-archive-single-op-using-dotnet"></a>

Tanto o [alto quanto o baixo nível APIs](using-aws-sdk.md) fornecidos pelo Amazon SDK para .NET fornecem um método para carregar um arquivo em uma única operação.

**Topics**
+ [Fazendo o upload de um arquivo usando a API de alto nível do AWS SDK para .NET](#uploading-an-archive-single-op-highlevel-using-dotnet)
+ [Carregando um arquivo em uma única operação usando a API de baixo nível do AWS SDK para .NET](#uploading-an-archive-single-op-lowlevel-using-dotnet)

## Fazendo o upload de um arquivo usando a API de alto nível do AWS SDK para .NET
<a name="uploading-an-archive-single-op-highlevel-using-dotnet"></a>

A classe `ArchiveTransferManager` da API de nível superior fornece o método `Upload` que você pode usar para fazer upload de um arquivo em um cofre. 

**nota**  
Você pode usar o método `Upload` para fazer upload de arquivos pequenos ou grandes. Dependendo do tamanho do arquivo que você estiver fazendo upload, esse método determina se é necessário fazer upload dele em uma única operação ou usar a API de multipart upload para fazer upload do arquivo em partes.

### Exemplo: fazer upload de um arquivo usando a API de alto nível do AWS SDK para .NET
<a name="upload-archive-highlevel-any-size-dotnet"></a>

O exemplo de código C\$1 a seguir faz upload de um arquivo em um cofre (`examplevault`) na Região Oeste dos EUA (Oregon). 

Para step-by-step obter instruções sobre como executar esse exemplo, consulte[Executar exemplos de código](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet). É preciso atualizar o código conforme mostrado com o nome do arquivo cujo upload deseja fazer.

**Example**  

```
using System;
using Amazon.Glacier;
using Amazon.Glacier.Transfer;
using Amazon.Runtime;

namespace glacier.amazon.com.rproxy.govskope.us.docsamples
{
  class ArchiveUploadHighLevel
  {
    static string vaultName = "examplevault"; 
    static string archiveToUpload = "*** Provide file name (with full path) to upload ***";

    public static void Main(string[] args)
    {
       try
      {
         var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USWest2);
         // Upload an archive.
         string archiveId = manager.Upload(vaultName, "upload archive test", archiveToUpload).ArchiveId;
         Console.WriteLine("Archive ID: (Copy and save this ID for use in other examples.) : {0}", archiveId);
         Console.WriteLine("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();
    }
  }
}
```

## Carregando um arquivo em uma única operação usando a API de baixo nível do AWS SDK para .NET
<a name="uploading-an-archive-single-op-lowlevel-using-dotnet"></a>

A API de nível inferior fornece métodos para todas as operações de arquivo. Veja a seguir as etapas para carregar um arquivo 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 fazer o upload do arquivo. Todas as operações que você executa usando esse cliente se aplicam a essa AWS região. 

1. Forneça informações sobre a solicitação criando uma instância da classe `UploadArchiveRequest`.

   Além dos dados cujo upload deseja fazer, você precisa fornecer uma soma de verificação (hash de árvore SHA-256) da carga útil, o nome do cofre e o ID da conta. 

   Se você não fornecer um ID da conta, o ID da conta associado às credenciais fornecidas por você para assinar a solicitação será pressuposto. Para obter mais informações, consulte [Como usar o AWS SDK para .NET com o Amazon Glacier](using-aws-sdk-for-dot-net.md). 

1. Execute o método `UploadArchive` fornecendo o objeto de solicitação como um parâmetro. 

   Em resposta, o Amazon Glacier retorna um ID do arquivo recém-carregado. 

### Exemplo: fazer upload de um arquivo em uma única operação usando a API de baixo nível do AWS SDK para .NET
<a name="upload-archive-single-op-lowlevel-dotnet"></a>

O exemplo de código do C\$1 a seguir ilustra as etapas anteriores. O exemplo usa o AWS SDK para .NET para carregar um arquivo em um cofre (`examplevault`). 

**nota**  
Para obter informações sobre a API REST subjacente para fazer upload de um arquivo em uma única solicitação, consulte [Upload Archive (POST archive)](api-archive-post.md).

Para step-by-step obter instruções sobre como executar esse exemplo, consulte[Executar exemplos de código](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet). É preciso atualizar o código conforme mostrado com o nome do arquivo cujo upload deseja fazer.

**Example**  

```
using System;
using System.IO;
using Amazon.Glacier;
using Amazon.Glacier.Model;
using Amazon.Runtime;

namespace glacier.amazon.com.rproxy.govskope.us.docsamples
{
  class ArchiveUploadSingleOpLowLevel
  {
    static string vaultName       = "examplevault";
    static string archiveToUpload = "*** Provide file name (with full path) to upload ***";

    public static void Main(string[] args)
    {
      AmazonGlacierClient client;
      try
      {
         using (client = new AmazonGlacierClient(Amazon.RegionEndpoint.USWest2))
        {
          Console.WriteLine("Uploading an archive.");
          string archiveId = UploadAnArchive(client);
          Console.WriteLine("Archive ID: {0}", archiveId);
        }
      }
      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 UploadAnArchive(AmazonGlacierClient client)
    {
      using (FileStream fileStream = new FileStream(archiveToUpload, FileMode.Open, FileAccess.Read))
      {
        string treeHash = TreeHashGenerator.CalculateTreeHash(fileStream);
        UploadArchiveRequest request = new UploadArchiveRequest()
        {
          VaultName = vaultName,
          Body = fileStream,
          Checksum = treeHash
        };
        UploadArchiveResponse response = client.UploadArchive(request);
        string archiveID = response.ArchiveId;
        return archiveID;
      }
    }
  }
}
```

# Fazer upload de um arquivo em uma única operação usando a API REST
<a name="uploading-an-archive-single-op-using-rest"></a>

Você pode usar a chamada de API Upload Archive para fazer upload de um arquivo em uma única operação. Para obter mais informações, consulte [Upload Archive (POST archive)](api-archive-post.md).

# Fazer upload de arquivos grandes em partes (Multipart Upload)
<a name="uploading-archive-mpu"></a>

**Topics**
+ [Processo Multipart Upload](#MPUprocess)
+ [Fatos rápidos](#qfacts)
+ [Fazendo upload de arquivos grandes usando o AWS CLI](uploading-an-archive-mpu-using-cli.md)
+ [Fazer upload de arquivos grandes em partes usando o Amazon SDK para Java](uploading-an-archive-mpu-using-java.md)
+ [Fazendo upload de arquivos grandes usando o AWS SDK para .NET](uploading-an-archive-mpu-using-dotnet.md)
+ [Fazer upload de arquivos grandes em partes usando a API REST](uploading-an-archive-mpu-using-rest.md)

## Processo Multipart Upload
<a name="MPUprocess"></a>

Conforme descrito em [Carregar um arquivo no Amazon Glacier](uploading-an-archive.md), recomendamos que os clientes do Amazon Glacier usem upload multiparte para fazer upload de arquivos maiores que 100 mebibytes (MiB). 

1. **Iniciar multipart upload** 

   Quando você envia uma solicitação para iniciar um upload multiparte, o Amazon Glacier retorna um ID desse upload, que é um identificador exclusivo. Todas as operações de multipart upload subsequentes exigirão esse ID. Esse ID não vai expirar por pelo menos 24 horas depois que o Amazon Glacier concluir o trabalho. 

   Na solicitação para iniciar um multipart upload, especifique o tamanho da parte em número de bytes. Cada parte do upload, exceto a última, deve ser desse tamanho.
**nota**  
Você não precisa saber o tamanho do arquivo geral ao usar o multipart upload. Isso significa que é possível usar multipart uploads nos casos em que, ao começar a carregar o arquivo, o tamanho do arquivo não é conhecido. É necessário decidir apenas o tamanho da parte ao iniciar o multipart upload.

   Na solicitação de multipart upload de iniciação, você também pode fornecer uma descrição de arquivo opcional. 

1. **Partes de upload**

   Para cada solicitação de upload da parte, você deve incluir o ID de multipart upload obtido na etapa 1. Na solicitação, você também deve especificar o intervalo de conteúdo, em bytes, identificando a posição da parte no arquivo final. O Amazon Glacier usará as informações do intervalo de conteúdo para montar o arquivo na sequência apropriada. Como você fornece o intervalo de conteúdo para cada parte do upload, ele determina a posição da parte na montagem final do arquivo e, assim, pode fazer upload de partes em qualquer ordem. Você também pode fazer upload de partes em paralelo. Se você fizer upload de uma nova parte usando o mesmo intervalo de conteúdo como uma parte carregada anteriormente, a parte cujo upload foi feito anteriormente será substituída. 

1. **Concluir (ou anular) o Multipart Upload**

   Depois de fazer upload de todas as partes do arquivo, você usará a operação completa. Mais uma vez, você deve especificar o ID de upload na solicitação. O Amazon Glacier cria um arquivo concatenando partes em ordem crescente com base no intervalo de conteúdo fornecido por você. A resposta do Amazon Glacier a uma solicitação para upload multiparte completo inclui um ID do arquivo recém-criado. Caso uma descrição de arquivo opcional tenha sido fornecida na solicitação Iniciar Upload Multiparte, o Amazon Glacier a associará ao arquivo montado. Depois de concluir com êxito um multipart upload, você não poderá se referir ao ID de multipart upload. Isso significa você não pode acessar partes associadas ao ID de multipart upload.

   Se anular um multipart upload, você não poderá fazer mais upload de partes usando esse ID de upload multipartes. Todo o armazenamento consumido por todas as partes associadas ao multipart upload anulado é liberado. Se algum upload de parte estiver em andamento, ele ainda poderá ser bem-sucedido ou falhar mesmo depois da interrupção.

### Operações de multipart upload adicionais
<a name="additional-mpu-operations"></a>

O Amazon Glacier fornece as seguintes chamadas adicionais de API de upload multiparte.

 
+ **List Parts**: usando essa operação, você pode listar as partes de um multipart upload. Isso retorna informações sobre as partes cujo upload você fez para um multipart upload. Para cada solicitação de partes da lista, o Amazon Glacier retorna informações para até 1.000 partes. Se houver mais partes a serem listadas para o multipart upload, o resultado será paginado, e um marcador será retornado na resposta na qual a lista deve continuar. Você precisa enviar solicitações adicionais para recuperar partes subsequentes. Observe que a lista de partes retornada não inclui partes que não tiveram o upload concluído.
+ **List Multipart Uploads**: usando essa operação, você pode obter uma lista de multipart upload em andamento. Um multipart upload em andamento é um upload que você iniciou, mas que ainda não concluiu nem interrompeu. Para cada solicitação de multipart uploads da lista, o Amazon Glacier retorna até 1.000 multipart uploads. Se houver mais multipart uploads a serem listadas, o resultado será paginado, e um marcador será retornado na resposta na qual a lista deve continuar. Você precisa enviar solicitações adicionais para recuperar os multipart uploads restantes.

## Fatos rápidos
<a name="qfacts"></a>

A tabela a seguir fornece especificações básicas do multipart upload.


| Item | Especificação | 
| --- | --- | 
| Tamanho de arquivo máximo | 10.000 x 4 gibibytes (GiB)  | 
| Número máximo de partes por upload | 10.000 | 
| Tamanho da parte | De 1 MiB a 4 GiB, a última parte pode ser < 1 MiB. Você especifica o valor de tamanho em bytes. O tamanho da peça deve ser um mebibyte (1024 kibibytes [KiB]) multiplicado por uma potência de 2. Por exemplo, `1048576` (1 MiB), `2097152` (2 MiB), `4194304` (4 MiB), `8388608` (8 MiB).   | 
| Número máximo de partes retornadas em uma solicitação de listagem de partes | 1.000  | 
| Número máximo de multipart uploads retornados em uma solicitação de listagem de multipart uploads | 1.000  | 

# Fazendo upload de arquivos grandes usando o AWS CLI
<a name="uploading-an-archive-mpu-using-cli"></a>

Você pode fazer upload de um arquivo no Amazon Glacier (Amazon Glacier) usando o AWS Command Line Interface ().AWS CLI Para melhorar a experiência de upload de arquivos maiores, o Amazon Glacier fornece várias operações de API compatíveis com uploads multiparte. Ao usar essas operações de API, você pode fazer upload de arquivos em partes. O upload dessas partes pode ser feito de maneira independente, em qualquer ordem, e em paralelo. Em caso de falha de um upload da parte, você precisa refazer o upload dessa parte, e não de todo o arquivo. Você pode usar um multipart uploads para arquivos de 1 byte até aproximadamente 40.000 GiB. 

Para obter mais informações sobre uploads multiparte do Amazon Glacier, consulte [Fazer upload de arquivos grandes em partes (Multipart Upload)](uploading-archive-mpu.md).

**Topics**
+ [(Pré-requisito) Configurando o AWS CLI](#Creating-Vaults-CLI-Setup)
+ [(Pré-requisito) Instalar Python](#Uploading-Archives-mpu-CLI-Install-Python)
+ [(Pré-requisito) Crie um cofre do Amazon Glacier](#Uploading-Archives-mpu-CLI-Create-Vault)
+ [Exemplo: Fazer upload de arquivos grandes em partes usando o AWS CLI](#Uploading-Archives-mpu-CLI-Implementation)

## (Pré-requisito) Configurando o AWS CLI
<a name="Creating-Vaults-CLI-Setup"></a>

1. Faça download e configure a AWS CLI. Para obter instruções, consulte os seguintes tópicos no *Guia do usuário do AWS Command Line Interface *: 

    [Instalando o AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) 

   [Configurando o AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)

1. Verifique sua AWS CLI configuração inserindo os seguintes comandos no prompt de comando. Esses comandos não fornecem as credenciais explicitamente, de modo que as credenciais do perfil padrão são usadas.
   + Tente usar o comando de ajuda.

     ```
     aws help
     ```
   + Para obter uma lista dos cofres do Amazon Glacier na conta configurada, use o comando `list-vaults`. *123456789012*Substitua pelo seu Conta da AWS ID.

     ```
     aws glacier list-vaults --account-id 123456789012
     ```
   + Para ver os dados de configuração atuais do AWS CLI, use o `aws configure list` comando.

     ```
     aws configure list
     ```

## (Pré-requisito) Instalar Python
<a name="Uploading-Archives-mpu-CLI-Install-Python"></a>

Para concluir um upload de várias partes, você deve calcular o hash da SHA256 árvore do arquivo que você está carregando. Fazer isso é diferente de calcular o hash da SHA256 árvore do arquivo que você deseja carregar. Para calcular o hash da SHA256 árvore do arquivo que você está carregando, você pode usar Java C\$1 (com .NET) ou. Python Neste exemplo, usaremos Python. Para obter instruções sobre como usar Java ou C\$1, consulte[Computar somas de verificação](checksum-calculations.md). 

Para obter informações sobre como instalar ou atualizar Python, consulte [Instalar a Python](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#installation) no *Guia do usuário Boto3*.

## (Pré-requisito) Crie um cofre do Amazon Glacier
<a name="Uploading-Archives-mpu-CLI-Create-Vault"></a>

Para usar o exemplo a seguir, você deve ter pelo menos um cofre do Amazon Glacier criado. Para obter mais informações sobre a criação de cofres, consulte [Criar um cofre no Amazon Glacier](creating-vaults.md).

## Exemplo: Fazer upload de arquivos grandes em partes usando o AWS CLI
<a name="Uploading-Archives-mpu-CLI-Implementation"></a>

Neste exemplo, você criará um arquivo e usará operações de API de multipart upload para fazer upload desse arquivo, em partes, no Amazon Glacier.
**Importante**  
Antes de iniciar este procedimento, verifique se você executou todas as etapas pré-requisitos. Para fazer upload de um arquivo, você deve ter um cofre criado, AWS CLI configurado e estar preparado para usar Java C\$1 ou Python calcular um hash de SHA256 árvore.

O procedimento a seguir usa os `complete-multipart-upload` AWS CLI comandos `initiate-multipart-upload``upload-multipart-part`, e. 

Para obter mais informações sobre esses comandos, consulte [https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-multipart-upload.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-multipart-upload.html),[https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-multipart-part.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-multipart-part.html), na seção [https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html) da *Referência de comandos da AWS CLI *.

1. Use o comando [https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-multipart-upload.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-multipart-upload.html) para criar um recurso de multipart upload. Na solicitação para iniciar um upload multipartes, especifique o tamanho da parte em número de bytes. Cada parte do upload, exceto a última, deve ser desse tamanho. Você não precisa saber o tamanho do arquivo geral ao usar o upload multipartes. No entanto, você precisará do tamanho total, em bytes, de cada parte ao concluir o upload na etapa final.

   No comando a seguir, substitua os valores dos parâmetros `--vault-name` e `--account-ID` por suas próprias informações. Esse comando especifica que você fará o upload de um arquivo com um tamanho de 1 mebibyte (MiB) (1024 x 1024 bytes) por arquivo. Substitua esse valor de parâmetro `--part-size`, se necessário. 

   ```
   aws glacier initiate-multipart-upload --vault-name awsexamplevault --part-size 1048576 --account-id 123456789012
   ```

   Saída esperada:

   ```
   {
   "location": "/123456789012/vaults/awsexamplevault/multipart-uploads/uploadId",
   "uploadId": "uploadId"
   }
   ```

   Quando concluído, o comando exibirá o ID de upload e a localização do recurso de upload multiparte no Amazon Glacier. Você usará este ID de carregamento nas etapas subsequentes.

1. Neste exemplo, você pode usar os comandos a seguir para criar um arquivo de 4,4 MiB, dividi-lo em partes de 1 MiB e fazer upload de cada parte. Para fazer upload de seus próprios arquivos, você pode seguir um procedimento semelhante de dividir seus dados em partes e fazer o upload de cada parte. 

   

**Linux ou macOS**  
O comando a seguir cria um arquivo de 4,4 MiB, chamado `file_to_upload`, no Linux ou no macOS.

   ```
   mkfile -n 9000b file_to_upload
   ```

**Windows**  
O comando a seguir cria um arquivo de 4,4 MiB, chamado `file_to_upload`, no Windows.

   ```
   fsutil file createnew file_to_upload 4608000
   ```

1. Em seguida, você dividirá esse arquivo em pedaços de 1 MiB. 

   ```
   split -b 1048576 file_to_upload chunk
   ```

   Você agora tem os cinco blocos a seguir. Os quatro primeiros têm 1 MiB e o último tem aproximadamente 400 kibibytes (KiB). 

   ```
   chunkaa
   chunkab
   chunkac
   chunkad
   chunkae
   ```

1. Use o comando [https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-multipart-part.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-multipart-part.html) para carregar uma parte de um arquivo. Você pode fazer upload de arquivos em partes. Você também pode fazer upload de partes em paralelo. Você pode fazer upload de até 10.000 partes de um multipart upload.

   No comando a seguir, substitua os valores dos parâmetros `--vault-name`, `--account-ID` e `--upload-id`. O ID de upload deve corresponder ao ID fornecido como saída do comando `initiate-multipart-upload`. O parâmetro `--range` especifica que você fará o upload de uma peça com um tamanho de 1 MiB (1024 x 1024 bytes). Esse tamanho deve corresponder ao que você especificou no comando `initiate-multipart-upload`. Ajuste esse valor de tamanho, se necessário. O parâmetro `--body` especifica o nome da parte que você está carregando.

   ```
   aws glacier upload-multipart-part --body chunkaa --range='bytes 0-1048575/*' --vault-name awsexamplevault --account-id 123456789012 --upload-id upload_ID
   ```

   Se for bem-sucedido, o comando produzirá uma saída que contém a soma de verificação da peça carregada.

1. Execute o comando `upload-multipart-part` novamente para carregar as partes restantes do multipart upload. Atualize os valores dos parâmetros `--range` e `–-body` de cada comando para que correspondam à parte que você está carregando. 

   ```
   aws glacier upload-multipart-part --body chunkab --range='bytes 1048576-2097151/*' --vault-name awsexamplevault --account-id 123456789012 --upload-id upload_ID
   ```

   ```
   aws glacier upload-multipart-part --body chunkac --range='bytes 2097152-3145727/*' --vault-name awsexamplevault --account-id 123456789012 --upload-id upload_ID
   ```

   ```
   aws glacier upload-multipart-part --body chunkad --range='bytes 3145728-4194303/*' --vault-name awsexamplevault --account-id 123456789012 --upload-id upload_ID
   ```

   ```
   aws glacier upload-multipart-part --body chunkae --range='bytes 4194304-4607999/*' --vault-name awsexamplevault --account-id 123456789012 --upload-id upload_ID
   ```
**nota**  
O valor do parâmetro do comando final `--range` é menor porque a parte final do nosso upload é menor que 1 MiB. Se for bem-sucedido, cada comando produzirá uma saída que contém a soma de verificação de cada parte carregada.

1. Em seguida, você montará o arquivo e finalizará o upload. Você deve incluir o tamanho total e o hash da SHA256 árvore do arquivo.

   Para calcular o hash da SHA256 árvore do arquivo, você pode usar Java C\$1 ou. Python Neste exemplo, usaremos Python. Para obter instruções sobre como usar Java ou C\$1, consulte[Computar somas de verificação](checksum-calculations.md).

   Crie o Python arquivo `checksum.py` e insira o código a seguir. Se necessário, substitua o nome do arquivo original.

   ```
   from botocore.utils import calculate_tree_hash
   					
   checksum = calculate_tree_hash(open('file_to_upload', 'rb'))
   print(checksum)
   ```

1. Execute `checksum.py` para calcular o hash SHA256 da árvore. O hash a seguir pode não corresponder à sua saída.

   ```
   $ python3 checksum.py
   $ 3d760edb291bfc9d90d35809243de092aea4c47b308290ad12d084f69988ae0c
   ```

1. Use o comando [https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html](https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html) para finalizar o upload do arquivo. Substitua os valores dos parâmetros `--vault-name`, `--account-ID`, `--upload-ID` e `--checksum`. O valor do parâmetro `--archive` especifica o tamanho total, em bytes, do arquivo. Esse valor deve ser a soma de todos os tamanhos das partes individuais cujo upload você fez. Substitua esse valor, se necessário. 

   ```
   aws glacier complete-multipart-upload --archive-size 4608000 --vault-name awsexamplevault --account-id 123456789012 --upload-id upload_ID --checksum checksum
   ```

   Quando concluído, o comando exibirá o ID, a soma de verificação e a localização do arquivo no Amazon Glacier. 

# Fazer upload de arquivos grandes em partes usando o Amazon SDK para Java
<a name="uploading-an-archive-mpu-using-java"></a>

Tanto o [alto quanto o baixo nível APIs](using-aws-sdk.md) fornecidos pelo Amazon SDK for Java fornecem um método para fazer o upload de um grande arquivo (consulte). [Carregar um arquivo no Amazon Glacier](uploading-an-archive.md) 

 
+ 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ê estiver fazendo upload, o método faz upload de um arquivo em uma única operação ou usa o suporte a upload multiparte no Amazon Glacier para fazer upload do 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 Java com o Amazon Glacier](using-aws-sdk-for-java.md)

**Topics**
+ [Carregando arquivos grandes em partes usando a API de alto nível do AWS SDK para Java](#uploading-an-archive-in-parts-highlevel-using-java)
+ [Faça upload de arquivos grandes em partes usando a API de baixo nível do AWS SDK para Java](#uploading-an-archive-mpu-using-java-lowlevel)

## Carregando arquivos grandes em partes usando a API de alto nível do AWS SDK para Java
<a name="uploading-an-archive-in-parts-highlevel-using-java"></a>

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 da API de nível superior decidem se é necessário fazer upload do arquivo em uma única operação ou usar a API de upload multiparte 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 Java](uploading-an-archive-single-op-using-java.md#uploading-an-archive-single-op-high-level-using-java).

## Faça upload de arquivos grandes em partes usando a API de baixo nível do AWS SDK para Java
<a name="uploading-an-archive-mpu-using-java-lowlevel"></a>

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 Java.

 

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. 

1. Inicie multipart upload chamando o método `initiateMultipartUpload`.

   Você precisa fornecer o nome do cofre no 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.

1. 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. 

1. Conclua 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 cria o arquivo a partir das partes carregadas e retorna um ID de arquivo.

### Exemplo: Fazer upload de um arquivo grande em um Parts usando o AWS SDK para Java
<a name="upload-archive-mpu-java-example"></a>

O exemplo de código Java a seguir usa o AWS SDK para Java para carregar um arquivo em um vault (`examplevault`). Para step-by-step obter instruções sobre como executar esse exemplo, consulte[Executar exemplos do Java para o Amazon Glacier usando o Eclipse](using-aws-sdk-for-java.md#setting-up-and-testing-sdk-java). É preciso atualizar o código conforme mostrado com o nome do arquivo cujo upload deseja fazer.

 

**nota**  
Este exemplo é válido para tamanhos de parte de 1 MB a 1 GB. No entanto, o Amazon Glacier dá suporte a tamanhos de parte de até 4 GB. 

**Example**  

```
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.glacier.AmazonGlacierClient;
import com.amazonaws.services.glacier.TreeHashGenerator;
import com.amazonaws.services.glacier.model.CompleteMultipartUploadRequest;
import com.amazonaws.services.glacier.model.CompleteMultipartUploadResult;
import com.amazonaws.services.glacier.model.InitiateMultipartUploadRequest;
import com.amazonaws.services.glacier.model.InitiateMultipartUploadResult;
import com.amazonaws.services.glacier.model.UploadMultipartPartRequest;
import com.amazonaws.services.glacier.model.UploadMultipartPartResult;
import com.amazonaws.util.BinaryUtils;

public class ArchiveMPU {

    public static String vaultName = "examplevault";
    // This example works for part sizes up to 1 GB.
    public static String partSize = "1048576"; // 1 MB.
    public static String archiveFilePath = "*** provide archive file path ***";
    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 {
            System.out.println("Uploading an archive.");
            String uploadId = initiateMultipartUpload();
            String checksum = uploadParts(uploadId);
            String archiveId = CompleteMultiPartUpload(uploadId, checksum);
            System.out.println("Completed an archive. ArchiveId: " + archiveId);
            
        } catch (Exception e) {
            System.err.println(e);
        }

    }
    
    private static String initiateMultipartUpload() {
        // Initiate
        InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest()
            .withVaultName(vaultName)
            .withArchiveDescription("my archive " + (new Date()))
            .withPartSize(partSize);            
        
        InitiateMultipartUploadResult result = client.initiateMultipartUpload(request);
        
        System.out.println("ArchiveID: " + result.getUploadId());
        return result.getUploadId();
    }

    private static String uploadParts(String uploadId) throws AmazonServiceException, NoSuchAlgorithmException, AmazonClientException, IOException {

        int filePosition = 0;
        long currentPosition = 0;
        byte[] buffer = new byte[Integer.valueOf(partSize)];
        List<byte[]> binaryChecksums = new LinkedList<byte[]>();
        
        File file = new File(archiveFilePath);
        FileInputStream fileToUpload = new FileInputStream(file);
        String contentRange;
        int read = 0;
        while (currentPosition < file.length())
        {
            read = fileToUpload.read(buffer, filePosition, buffer.length);
            if (read == -1) { break; }
            byte[] bytesRead = Arrays.copyOf(buffer, read);

            contentRange = String.format("bytes %s-%s/*", currentPosition, currentPosition + read - 1);
            String checksum = TreeHashGenerator.calculateTreeHash(new ByteArrayInputStream(bytesRead));
            byte[] binaryChecksum = BinaryUtils.fromHex(checksum);
            binaryChecksums.add(binaryChecksum);
            System.out.println(contentRange);
                        
            //Upload part.
            UploadMultipartPartRequest partRequest = new UploadMultipartPartRequest()
            .withVaultName(vaultName)
            .withBody(new ByteArrayInputStream(bytesRead))
            .withChecksum(checksum)
            .withRange(contentRange)
            .withUploadId(uploadId);               
        
            UploadMultipartPartResult partResult = client.uploadMultipartPart(partRequest);
            System.out.println("Part uploaded, checksum: " + partResult.getChecksum());
            
            currentPosition = currentPosition + read;
        }
        fileToUpload.close();
        String checksum = TreeHashGenerator.calculateTreeHash(binaryChecksums);
        return checksum;
    }

    private static String CompleteMultiPartUpload(String uploadId, String checksum) throws NoSuchAlgorithmException, IOException {
        
        File file = new File(archiveFilePath);

        CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest()
            .withVaultName(vaultName)
            .withUploadId(uploadId)
            .withChecksum(checksum)
            .withArchiveSize(String.valueOf(file.length()));
        
        CompleteMultipartUploadResult compResult = client.completeMultipartUpload(compRequest);
        return compResult.getLocation();
    }
}
```

# Fazendo upload de arquivos grandes usando o AWS SDK para .NET
<a name="uploading-an-archive-mpu-using-dotnet"></a>

Tanto o [alto quanto o baixo nível APIs](using-aws-sdk.md) fornecidos pelo Amazon SDK para .NET fornecem um método para carregar grandes arquivos em partes (consulte). [Carregar um arquivo no Amazon Glacier](uploading-an-archive.md) 

 
+ 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ê estiver fazendo upload, o método faz upload de um arquivo em uma única operação ou usa o suporte a upload multiparte no Amazon Glacier para fazer upload do 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. [Como usar o AWS SDK para .NET com o Amazon Glacier](using-aws-sdk-for-dot-net.md)

**Topics**
+ [Carregando arquivos grandes em partes usando a API de alto nível do AWS SDK para .NET](#uploading-an-archive-in-parts-highlevel-using-dotnet)
+ [Carregando arquivos grandes em partes usando a API de baixo nível do AWS SDK para .NET](#uploading-an-archive-in-parts-lowlevel-using-dotnet)

## Carregando arquivos grandes em partes usando a API de alto nível do AWS SDK para .NET
<a name="uploading-an-archive-in-parts-highlevel-using-dotnet"></a>

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 da API de nível superior decidem se é necessário fazer upload do arquivo em uma única operação ou usar a API de upload multiparte 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](uploading-an-archive-single-op-using-dotnet.md#uploading-an-archive-single-op-highlevel-using-dotnet).

## Carregando arquivos grandes em partes usando a API de baixo nível do AWS SDK para .NET
<a name="uploading-an-archive-in-parts-lowlevel-using-dotnet"></a>

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. 

1. 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.

1. 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. 

1. 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 cria o arquivo a partir das partes carregadas e retorna um ID de arquivo.

### Exemplo: fazer upload de um arquivo grande em partes usando o Amazon SDK para .NET
<a name="upload-archive-mpu-dotnet-example"></a>

O exemplo de código C\$1 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, consulte[Executar exemplos de código](using-aws-sdk-for-dot-net.md#setting-up-and-testing-sdk-dotnet). Você precisa atualizar o código conforme mostrado com o nome de um arquivo cujo upload deseja fazer.

**Example**  

```
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.us.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;
    }
  }
}
```

# Fazer upload de arquivos grandes em partes usando a API REST
<a name="uploading-an-archive-mpu-using-rest"></a>

Conforme descrito em [Fazer upload de arquivos grandes em partes (Multipart Upload)](uploading-archive-mpu.md), o multipart upload se refere a um conjunto de operações que permite fazer upload de um arquivo em partes e realizar operações relacionadas. Para obter mais informações sobre essas operações, consulte os seguintes tópicos de referência da API:

 
+ [Initiate Multipart Upload (POST multipart-uploads)](api-multipart-initiate-upload.md)
+ [Upload Part (PUT uploadID)](api-upload-part.md)
+ [Complete Multipart Upload (POST uploadID)](api-multipart-complete-upload.md)
+ [Abort Multipart Upload (DELETE uploadID)](api-multipart-abort-upload.md)
+ [List Parts (GET uploadID)](api-multipart-list-parts.md)
+ [List Multipart Uploads (GET multipart-uploads)](api-multipart-list-uploads.md)