Uploads e downloads

Nesta página, abordaremos conceitos relacionados ao upload e download de objetos. É possível fazer upload e armazenar qualquer tipo MIME de dados de até 5 TB.

Uploads

Envie solicitações de upload para o Cloud Storage das seguintes maneiras:

  • Upload simples. Use se o arquivo for pequeno o suficiente para fazer upload novamente por completo se a conexão falhar e se não houver metadados do objeto para enviar como parte da solicitação.

  • Upload de várias partes. Use se o arquivo for pequeno o suficiente para fazer o upload novamente por completo se a conexão falhar e você quiser incluir metadados do objeto como parte da solicitação.

  • Upload retomável. Use para fazer uma transferência mais confiável, o que é especialmente importante para arquivos grandes. Os uploads retomáveis são uma boa opção para a maioria dos aplicativos, já que também funcionam para arquivos pequenos ao custo de uma solicitação HTTP adicional por upload. Também é possível usar transferências por streaming, um tipo de upload retomável que permite fazer upload de um objeto de tamanho desconhecido.

Usando esses tipos básicos de upload, estratégias de upload mais avançadas são possíveis, como uploads compostos paralelos e uploads de streaming.

Considerações sobre tamanho do upload

Ao escolher se quer usar uploads retomáveis, simples ou de várias partes, considere o tempo que você está disposto a perder caso ocorra uma falha de rede e seja necessário reiniciar o upload. Para conexões mais rápidas, o tamanho do corte normalmente é maior.

Por exemplo, digamos que você esteja disposto a tolerar perder 30 segundos:

  • Se você fizer upload de um sistema local com uma velocidade de upload média de 8 Mbps, poderá usar uploads simples ou de várias partes para arquivos com até 30 MB.

  • Se você fizer o upload de um serviço na região que tenha uma média de 500 Mbps de velocidade de upload, o tamanho do corte dos arquivos será de quase 2 GB.

Uploads compostos paralelos

Uma estratégia para fazer o upload de arquivos grandes é chamada de uploads compostos paralelos. Nesse upload, um arquivo é dividido em até 32 partes, os blocos são enviados em paralelo aos objetos temporários, o objeto final é recriado usando os objetos temporários e o objetos temporários são excluídos.

Os uploads compostos paralelos podem ser significativamente mais rápidos quando a velocidade do disco e da rede não estão limitando os fatores. No entanto, o objeto final armazenado no seu bucket é um objeto composto, que tem apenas um hash crc32c, não um hash MD5. Como resultado, você precisa usar o crcmod para realizar verificações de integridade ao fazer o download do objeto com a gsutil ou outros aplicativos Python. Só faça uploads compostos paralelos se o seguinte for aplicável:

  • O bucket carregado não tiver uma chave de criptografia gerenciada pelo cliente padrão porque a operação compose não é compatível com objetos de origem criptografados dessa maneira.

  • Qualquer usuário do Python que precise fazer o download dos seus objetos tem o google-crc32c ou o crcmod instalado.

  • Qualquer usuário da gsutil que precise fazer o download dos seus objetos tem o crcmod instalado.

    Por exemplo, se você usar o gsutil para fazer upload de recursos de vídeo que são veiculados apenas por um aplicativo Java, os uploads compostos paralelos são uma boa escolha, porque há implementações CRC32C eficientes disponíveis em Java.

  • Você não precisa que os objetos enviados tenham um hash MD5.

Suporte da gsutil

É possível configurar como e quando a gsutil executa uploads compostos paralelos, que são desativados por padrão, modificando os dois parâmetros a seguir:

  • parallel_composite_upload_threshold: o tamanho total mínimo do arquivo para executar um upload composto paralelo. É possível desativar todos os uploads compostos paralelos no gsutil definindo esse valor como 0.

  • parallel_composite_upload_component_size: o tamanho máximo de cada objeto temporário. O parâmetro será ignorado se o tamanho total do arquivo for tão grande que exija mais de 32 partes desse tamanho.

É possível modificar os dois parâmetros por comando usando a opção de nível superior -o ou para todos os comandos da gsutil editando o arquivo de configuração .boto:

Não é preciso mais espaço no disco local ao usar o gsutil para realizar uploads compostos paralelos. Se um upload composto paralelo falhar antes da composição, execute o comando gsutil novamente para aproveitar os uploads retomáveis para os objetos temporários que falharam. Os objetos temporários que foram enviados por upload antes da falha não serão enviados de novo quando você retomar o upload.

Objetos temporários serão nomeados da seguinte maneira:

RANDOM_ID/gsutil/tmp/parallel_composite_uploads/for_details_see/gsutil_help_cp/HASH

Quando RANDOM_ID for um valor numérico e HASH for uma hash MD5 (não relacionado à hash do conteúdo do arquivo ou objeto).

Geralmente, os objetos temporários são excluídos no final de um upload composto paralelo. No entanto, para evitar que os objetos temporários sejam mantidos, você precisa verificar o status de saída do comando da gsutil e excluir manualmente qualquer objeto temporário que foi enviado como parte de qualquer upload cancelado.

Suporte a JSON e XML

Tanto a API JSON quanto a API XML são compatíveis com o upload de blocos de objetos em paralelo e recombinando-as em um único objeto usando a operação compose.

Informações importantes ao projetar o código para uploads compostos paralelos:

  • Ao usar a operação compose, os objetos de origem não são afetados pelo processo de composição.

    Isso significa que, se elas forem temporárias, você precisará excluí-las logo depois de concluir a composição ou então os objetos de origem permanecerão no bucket e serão cobrados de acordo.

  • Para proteger contra alterações em objetos de origem entre as solicitações de upload e de composição, os usuários precisam fornecer um número de geração esperado para cada origem.

Downloads

É possível enviar solicitações de download para o Cloud Storage das seguintes maneiras:

  • Download simples: download de objetos em um destino.

  • Download de streaming: download de dados em um processo.

  • Download de objetos divididos: download de objetos grandes.

Compatibilidade de upload e download por ferramenta

Clique nas guias abaixo para ver as operações compatíveis com cada ferramenta:

Console

gsutil

Bibliotecas cliente

C++

C#

Go

Java

Node.js

PHP

Python

Ruby

APIs REST

API JSON

API XML

Endpoints de solicitação

Caso você use APIs REST para fazer upload e download, consulte Endpoints de solicitação para ver uma discussão completa sobre os endpoints de solicitação que podem ser usados.

A seguir