Como fazer transferências por streaming

O Cloud Storage é compatível com transferências por streaming, que permitem transmitir dados de e para sua conta do Cloud Storage sem que os dados precisem ser salvos em um arquivo.

Os uploads por streaming são úteis quando você quer fazer o upload de dados com tamanho final desconhecido no início do upload, como ao gerar os dados de upload de um processo ou ao compactar um objeto rapidamente.

Os downloads por streaming são úteis quando você quer fazer o download de dados do Cloud Storage para um processo.

Como fazer uploads por streaming

Os exemplos a seguir mostram como executar um upload por streaming de um processo para um objeto do Cloud Storage:

gsutil

  1. Envie os dados ao comando gsutil cp e use um traço para indicar o URL de origem:

    PROCESS_NAME | gsutil cp - gs://BUCKET_NAME/OBJECT_NAME

    Em que:

    • PROCESS_NAME é o nome do processo do qual você está coletando dados. Por exemplo, collect_measurements.
    • BUCKET_NAME é o nome do bucket que contém o objeto. Por exemplo, my_app_bucket.
    • OBJECT_NAME é o nome do objeto criado a partir dos dados. Por exemplo, data_measurements.

Amostras de código

C++

Para mais informações, consulte a documentação de referência da API Cloud Storage para C++.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name,
   std::string const& object_name, int desired_line_count) {
  std::string const text = "Lorem ipsum dolor sit amet";
  gcs::ObjectWriteStream stream =
      client.WriteObject(bucket_name, object_name);

  for (int lineno = 0; lineno != desired_line_count; ++lineno) {
    // Add 1 to the counter, because it is conventional to number lines
    // starting at 1.
    stream << (lineno + 1) << ": " << text << "\n";
  }

  stream.Close();

  StatusOr<gcs::ObjectMetadata> metadata = std::move(stream).metadata();
  if (!metadata) throw std::runtime_error(metadata.status().message());
  std::cout << "Successfully wrote to object " << metadata->name()
            << " its size is: " << metadata->size()
            << "\nFull metadata: " << *metadata << "\n";
}

C#

Para mais informações, consulte a documentação de referência da API Cloud Storage para C#.

Para fazer streaming de uploads de objetos usando C#, consulte a documentação de referência de SimpleUpload.

Go

Para mais informações, consulte a documentação de referência da API Cloud Storage para Go.

Para fazer streaming de uploads de objetos usando o Go, consulte a documentação de referência de NewWriter.

Observe que o Go usa as interfaces io.Writer e io.Reader padrão para uploads e downloads, respectivamente, e ambos permitem o streaming.

Java

Para mais informações, consulte a documentação de referência da API Cloud Storage para Java.

Para fazer streaming de uploads de objetos usando Java, consulte a documentação de referência de writer.

Node.js

Para mais informações, consulte a documentação de referência da API Cloud Storage para Node.js.

Para fazer streaming de uploads de objetos usando o Node.js, consulte a documentação de referência de createWriteStream.

PHP

Para mais informações, consulte a documentação de referência da API Cloud Storage para PHP.

Para fazer streaming de uploads de objetos usando o PHP, consulte a documentação de referência de upload.

Python

Para mais informações, consulte a documentação de referência da API Cloud Storage para Python.

Para fazer streaming de objetos de objeto usando Python, consulte a documentação de referência do ResumableUploads.

Ruby

Para mais informações, consulte a documentação de referência da API Cloud Storage para Ruby.

No momento, não é possível fazer uploads por streaming com a biblioteca de cliente do Ruby.

APIs REST

API JSON

Para executar um upload por streaming, siga as instruções sobre como executar um upload retomável com as seguintes considerações:

  • Ao fazer upload dos próprios dados de arquivo, use um upload de vários blocos.

  • Como você não sabe o tamanho total do arquivo até chegar ao bloco final, use um * para o tamanho total do arquivo no cabeçalho Content-Range de blocos intermediários.

    Por exemplo, se o primeiro bloco do upload tiver um tamanho de 512 KiB, o cabeçalho Content-Range do bloco será bytes 0-524287/*. Se o upload tiver 64.000 bytes restantes após o primeiro bloco, envie um bloco final que contenha os bytes restantes e tenha um cabeçalho Content-Range com o valor bytes 524288-588287/588288.

API XML

Para realizar um upload por streaming, use um destes métodos:

  • Um upload de várias partes da API XML

  • Um upload retomável, com os seguintes ajustes:

    • Ao fazer upload dos próprios dados de arquivo, use um upload de vários blocos.

    • Como você não sabe o tamanho total do arquivo até chegar ao bloco final, use um * para o tamanho total do arquivo no cabeçalho Content-Range de blocos intermediários.

      Por exemplo, se o primeiro bloco do upload tiver um tamanho de 512 Kib, o cabeçalho Content-Range do bloco será bytes 0-524287/*. Se o upload tiver 64.000 bytes restantes após o primeiro bloco, envie um bloco final que contenha os bytes restantes e tenha um cabeçalho Content-Range com o valor bytes 524288-588287/588288.

Como fazer downloads por streaming

Os exemplos a seguir mostram como realizar o download de um objeto do Cloud Storage para um processo:

gsutil

  1. Execute o comando gsutil cp usando um traço para o URL de destino. Em seguida, direcione os dados para o processo:

    gsutil cp gs://BUCKET_NAME/OBJECT_NAME - | PROCESS_NAME

    Em que:

    • BUCKET_NAME é o nome do bucket que contém o objeto. Por exemplo, my_app_bucket.
    • OBJECT_NAME é o nome do objeto que você está transmitindo para o processo. Por exemplo, data_measurements.
    • PROCESS_NAME é o nome do processo no qual você está inserindo dados. Por exemplo, analyze_data.

Também é possível realizar a transferência por streaming dos dados de um objeto do Cloud Storage para um comando padrão do Linux, como sort:

gsutil cp gs://my_app_bucket/data_measurements - | sort

Amostras de código

C++

Para mais informações, consulte a documentação de referência da API Cloud Storage para C++.

Para fazer o streaming de downloads de objetos usando C++, consulte a documentação de referência de ReadObject.

C#

Para mais informações, consulte a documentação de referência da API Cloud Storage para C#.

Para fazer o streaming de downloads de objetos usando C#, consulte a documentação de referência de SimpleDownload.

Go

Para mais informações, consulte a documentação de referência da API Cloud Storage para Go.

Para fazer o streaming de downloads de objetos usando Go, consulte a documentação de referência de NewReader.

Observe que o Go usa as interfaces io.Writer e io.Reader padrão para uploads e downloads, respectivamente, e ambos permitem o streaming.

Java

Para mais informações, consulte a documentação de referência da API Cloud Storage para Java.

Para fazer o streaming de downloads de objetos usando Java, consulte a documentação de referência de reader.

Node.js

Para mais informações, consulte a documentação de referência da API Cloud Storage para Node.js.

Para fazer o streaming de downloads de objetos usando o Node.js, consulte a documentação de referência de createReadStream.

PHP

Para mais informações, consulte a documentação de referência da API Cloud Storage para PHP.

Para fazer o streaming de downloads de objetos usando o PHP, consulte a documentação de referência de downloadAsStreams.

Python

Para mais informações, consulte a documentação de referência da API Cloud Storage para Python.

Para fazer streaming de downloads de objetos usando o Python, consulte a documentação de referência do ChunnedDownload.

Ruby

Para mais informações, consulte a documentação de referência da API Cloud Storage para Ruby.

No momento, não é possível fazer downloads por streaming com a biblioteca de cliente do Ruby.

A seguir