Esta página descreve como fazer uma solicitação de upload retomável na API Street View Publishing. Esse protocolo permite retomar uma operação de upload quando uma falha de comunicação interrompe o fluxo de dados. Use essa opção se:
- Você está fazendo o upload de arquivos grandes.
- A probabilidade de interrupção de rede ou alguma outra falha de transmissão é alta, por exemplo, se você estiver fazendo upload de um arquivo de um app para dispositivos móveis.
Os uploads retomáveis também podem reduzir o uso da largura de banda quando há uma falha de rede, porque você não precisa reiniciar os uploads de arquivos grandes desde o início.
Se você estiver enviando arquivos pequenos por uma conexão de rede confiável, use um upload simples.
Como iniciar uma sessão de upload retomável
Depois de receber um uploadUrl
, é possível iniciar uma sessão de
upload retomável:
- Crie uma solicitação
POST
para ouploadUrl
. Adicione os cabeçalhos HTTP a seguir:
- Defina
X-Goog-Upload-Protocol
comoresumable
. X-Goog-Upload-Header-Content-Length
: defina como o número total de bytes dos dados do arquivo que serão transferidos nas solicitações subsequentes.X-Goog-Upload-Header-Content-Type
: defina como o tipo MIME dos dados do arquivo.- Defina
X-Goog-Upload-Command
comostart
.
- Defina
Envie a solicitação.
Exemplo: iniciar uma sessão de upload retomável
O exemplo a seguir mostra como iniciar uma sessão retomável para fazer upload de um novo
arquivo. Nesse caso, o arquivo é uma imagem, e o número total de bytes no
arquivo é 4200000. Observe que o corpo da solicitação está vazio. Portanto, o cabeçalho Content-Length
está definido como 0.
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234 HTTP/1.1
Authorization: Bearer [YOUR_AUTH_TOKEN]
Content-Length: 0
X-Goog-Upload-Protocol: resumable
X-Goog-Upload-Header-Content-Length: 4200000
X-Goog-Upload-Header-Content-Type: image/jpeg
X-Goog-Upload-Command: start
Salvar o URL da sessão retomável descreve como lidar com a resposta da solicitação para iniciar a sessão de upload retomável.
Como salvar o URL da sessão retomável
No caso da solicitação enviada para iniciar uma sessão de upload retomável, o servidor responderá
com um código de status HTTP 200 OK
, incluindo o seguinte cabeçalho:
X-Goog-Upload-URL
: um URL exclusivo que precisa ser usado para concluir o upload em todas as solicitações restantes.
Copie e salve o URL de resiliência retomável para poder usá-lo nas solicitações subsequentes.
Exemplo: salvar o URL da sessão retomável
O exemplo a seguir mostra uma resposta que inclui um URL de sessão retomável e um requisito de granularidade de tamanho.
HTTP/1.1 200 OK
X-Goog-Upload-URL: https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable
Como fazer upload do arquivo
Há duas formas de fazer o upload de um arquivo com uma sessão retomável:
- Em uma única solicitação: Essa abordagem geralmente é a melhor, porque requer menos solicitações e, portanto, tem melhor desempenho.
- Em várias partes: Use essa abordagem se:
- Você precisa reduzir a quantidade de dados transferidos em uma solicitação única. Talvez seja necessário fazer isso quando houver um limite de tempo fixo para solicitações individuais.
- Você precisa fornecer um indicador personalizado que mostre o progresso do upload.
- Você precisa saber quando é seguro descartar dados.
Solicitação única
Para fazer upload do arquivo em uma única solicitação, faça o seguinte:
- Crie uma solicitação
POST
para o URL da sessão retomável. - Adicione os dados do arquivo ao corpo da solicitação.
Adicione os cabeçalhos HTTP a seguir:
Content-Length
: defina como o número de bytes no arquivo.- Defina
X-Goog-Upload-Command
comoupload, finalize
.
Envie a solicitação.
Se a solicitação de upload for interrompida ou você receber uma resposta 5xx
, siga o procedimento em Como retomar um upload interrompido.
Vários pedaços
Para fazer upload do arquivo em várias partes, faça o seguinte:
- Crie uma solicitação
POST
para o URL da sessão retomável. - Adicione os dados de cada parte ao corpo da solicitação. Crie blocos em múltiplos de 2 MiB (mebibytes), exceto o fragmento final que conclui o upload. Mantenha o tamanho das partes no maior tamanho possível para que o upload seja eficiente.
Adicione os cabeçalhos HTTP a seguir:
Content-Length
: defina como o número de bytes do bloco.- Defina
X-Goog-Upload-Command
comoupload
. Para a última parte, defina comoupload, finalize
. X-Goog-Upload-Offset
: definido como o deslocamento em que os bytes precisam ser gravados. Observe que é preciso fazer o upload dos bytes em série.
Envie a solicitação. Se a solicitação de upload for interrompida ou você receber uma resposta
5xx
, siga o procedimento em Como retomar um upload interrompido.Repita as etapas 1 a 4 para cada parte restante do arquivo.
Exemplo: como fazer upload do arquivo
Solicitação única
O exemplo a seguir mostra uma solicitação retomável para fazer upload de um arquivo JPEG inteiro de 4.200.000 bytes em uma única solicitação usando o URL da sessão retomável da etapa anterior:
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable HTTP/1.1 Content-Length: 4200000 X-Goog-Upload-Command: upload, finalize X-Goog-Upload-Offset: 0 [BYTES 0-4199999]
Se a solicitação for bem-sucedida, você receberá um código de status HTTP 200 OK
.
Vários pedaços
O exemplo a seguir mostra uma solicitação retomável para fazer upload de um arquivo JPEG de 4.200.000 bytes em vários blocos usando o URL da sessão retomável e a granularidade de tamanho recebida na etapa anterior. Nesse exemplo, usamos um tamanho de bloco de 2097.000 bytes, que é um múltiplo de 2 MiB (mebibytes).
Primeiro bloco:
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable HTTP/1.1 Content-Length: 2097000 X-Goog-Upload-Command: upload X-Goog-Upload-Offset: 0[BYTES 0-2096999]
Segunda parte:
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable HTTP/1.1 Content-Length: 2097000 X-Goog-Upload-Command: upload X-Goog-Upload-Offset: 2097000[BYTES 2097000-4193999]
Último bloco:
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable HTTP/1.1 Content-Length: 6000 X-Goog-Upload-Command: upload, finalize X-Goog-Upload-Offset: 4194000[BYTES 4194000-4200000]
Como retomar um upload interrompido
Se a solicitação de upload for interrompida ou se você receber um código de status HTTP que não seja 200
, consulte o servidor para saber quanto do upload foi bem-sucedido:
- Crie uma solicitação
POST
para o URL da sessão retomável. - Defina
X-Goog-Upload-Command
comoquery
. - Envie a solicitação.
O servidor responderá com um código de status HTTP 200 OK
e o tamanho atual do
upload:
HTTP/1.1 200 OK
X-Goog-Upload-Status: active
X-Goog-Upload-Size-Received: 100
Depois, você pode retomar o envio nesse deslocamento. É preciso retomar no deslocamento fornecido pelo servidor, a menos que você envie um comando combinado de upload e finalização. Nesse caso, também é possível retomar no deslocamento 0.
Se o cabeçalho X-Goog-Upload-Status
na resposta HTTP do comando de consulta estiver presente e o valor não for active
, o upload já foi encerrado.