O upload de itens de mídia é um processo de duas etapas:
- Faça upload dos bytes dos seus arquivos de mídia para um servidor do Google usando os uploads endpoint do Google Cloud. Isso retorna um token de upload que identifica os bytes enviados.
- Use uma chamada batchCreate com o token de upload para criar um item de mídia na conta do Google Fotos do usuário.
Estas etapas descrevem o processo de upload de um único item de mídia. Se você estiver fazendo upload de vários itens de mídia (muito provável para qualquer aplicativo de produção), consulte as práticas recomendadas para uploads para melhorar a eficiência.
Antes de começar
Escopos de autorização necessários
O upload de itens de mídia para a biblioteca ou o álbum de um usuário exige o
escopo photoslibrary.appendonly
. Para mais informações sobre escopos, consulte
Escpos de autorização.
Tipos e tamanhos de arquivos aceitos
Você pode fazer o upload dos tipos de arquivo listados nesta tabela.
Tipo de mídia | Tipos de arquivos aceitos | Tamanho máximo do arquivo |
---|---|---|
Fotos | AVIF, BMP, GIF, HEIC, ICO, JPG, PNG, TIFF, WEBP e alguns arquivos RAW. | 200 MB |
Vídeos | 3GP, 3G2, ASF, AVI, DIVX, M2T, M2TS, M4V, MKV, MMV, MOD, MOV, MP4, MPG, MTS, TOD, WMV. | 20 GB |
Etapa 1: fazer upload de bytes
Fazer upload de bytes para o Google usando solicitações de upload. Uma solicitação de upload foi concluída
retorna um token de upload na forma de uma string de texto bruto. Usar estes uploads
para criar itens de mídia com a chamada batchCreate
.
REST
Inclua os seguintes campos no cabeçalho da solicitação POST:
Campos de cabeçalho | |
---|---|
Content-type |
Defina como application/octet-stream . |
X-Goog-Upload-Content-Type |
Recomendado. Defina como o tipo MIME dos bytes que estão sendo enviados.
Tipos MIME comuns incluem image/jpeg ,
image/png e image/gif .
|
X-Goog-Upload-Protocol |
Defina como raw . |
Aqui está um cabeçalho de solicitação POST:
POST https://photoslibrary.googleapis.com/v1/uploads Authorization: Bearer oauth2-token Content-type: application/octet-stream X-Goog-Upload-Content-Type: mime-type X-Goog-Upload-Protocol: raw
No corpo da solicitação, inclua o binário do arquivo:
media-binary-data
Se essa solicitação POST for bem-sucedida, um token de upload que está no formato
de uma string de texto bruto, é retornado como o corpo da resposta. Para criar mídia
itens, use essas strings de texto na chamada de batchCreate
.
upload-token
O tamanho de arquivo sugerido para imagens é inferior a 50 MB. Arquivos maiores que 50 MB estão propensos a problemas de desempenho.
A API Google Photos Library oferece suporte a envios resumíveis. Com um upload retomável, dividir um arquivo de mídia em várias seções e fazer upload de uma seção de cada vez.
Etapa 2: criar um item de mídia
Depois de fazer upload dos bytes dos arquivos de mídia, é possível criá-los como arquivos de mídia itens do Google Fotos usando tokens de upload. Um token de upload é válido por um dia após a criação. Um item de mídia é sempre adicionado ao biblioteca. Itens de mídia só podem ser adicionados a álbuns criados pela sua app. Para mais informações, consulte Autorização do Google Cloud.
Para criar novos itens de mídia, chame
mediaItems.batchCreate
especificando uma lista de newMediaItems
. Cada newMediaItem
contém um upload
token especificado em simpleMediaItem
, e uma descrição opcional
que é mostrado ao usuário.
O campo de descrição pode ter no máximo 1.000 caracteres e deve incluir texto significativo criado pelos usuários. Por exemplo, "Nossa viagem ao parque". ou "Jantar de Natal". Não inclua metadados, como nomes de arquivos, nem metadados tags ou outros textos gerados automaticamente.
Para ter o melhor desempenho, reduza o número de chamadas para mediaItems.batchCreate
que
você precisa fazer incluindo vários itens de mídia em uma chamada. Sempre aguardar até
a solicitação anterior foi concluída antes de fazer uma chamada subsequente para o mesmo
usuário.
É possível criar um ou vários itens de mídia na biblioteca de um usuário especificando as descrições e os tokens de upload correspondentes:
REST
Este é o cabeçalho da solicitação POST:
POST https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate Content-type: application/json Authorization: Bearer oauth2-token
O corpo da solicitação precisa especificar uma lista de newMediaItems
.
{ "newMediaItems": [ { "description": "item-description", "simpleMediaItem": { "fileName": "filename", "uploadToken": "upload-token" } } , ... ] }
Também é possível especificar albumId
e albumPosition
para
inserir itens de mídia em um local específico no álbum.
REST
{ "albumId": "album-id", "newMediaItems": [ { "description": "item-description", "simpleMediaItem": { "fileName": "filename", "uploadToken": "upload-token" } } , ... ], "albumPosition": { "position": "after-media-item", "relativeMediaItemId": "media-item-id" } }
Para mais detalhes sobre o posicionamento nos álbuns, consulte Adicionar e aprimoramento.
Resposta de criação de item
A chamada mediaItems.batchCreate
retorna o resultado de cada um dos itens de mídia.
que você tentou criar. A lista de newMediaItemResults
indica o status e
inclui o uploadToken
da solicitação. Um código de status diferente de zero indica
erro.
REST
Se todos os itens de mídia forem criados, a solicitação vai retornar o status HTTP 200 OK
. Se não for possível criar alguns itens de mídia,
a solicitação retorna o status HTTP 207 MULTI-STATUS
para indicar
sucesso parcial.
{ "newMediaItemResults": [ { "uploadToken": "upload-token", "status": { "message": "Success" }, "mediaItem": { "id": "media-item-id", "description": "item-description", "productUrl": "https://photos.google.com/photo/photo-path", "mimeType": "mime-type", "mediaMetadata": { "width": "media-width-in-px", "height": "media-height-in-px", "creationTime": "creation-time", "photo": {} }, "filename": "filename" } }, { "uploadToken": "upload-token", "status": { "code": 13, "message": "Internal error" } } ] }
Se um item for adicionado, será retornado mediaItem
contendo o
mediaItemId
, productUrl
e mediaMetadata
. Para mais informações, consulte
Acessar itens de mídia
Se o item de mídia for um vídeo, ele terá que ser processado primeiro. O mediaItem
contém um status
dentro da mediaMetadata
que descreve o processamento
do arquivo de vídeo. Um arquivo recém-enviado retorna o status PROCESSING
primeiro, antes de ser READY
para uso. Para mais detalhes, consulte Acessar mídia
de linha de comando.
Se você encontrar um erro durante a chamada, siga o Guia de e tente fazer a solicitação novamente. Você pode querer acompanhar adições bem-sucedidas, para que a imagem possa ser inserida para o álbum na posição correta durante a próxima solicitação. Para mais da conta, consulte Criar álbuns.
Os resultados são sempre retornados na mesma ordem em que os tokens de upload foram enviados.
Práticas recomendadas para uploads
As práticas recomendadas e os recursos a seguir ajudam a melhorar sua eficiência geral com uploads:
- Siga as práticas recomendadas de tentativa e tratamento de erros
práticas, manter
os seguintes pontos em mente:
429
erros podem ocorrer quando sua cota acaba ou você tem uma taxa limitada por fazer muitas chamadas rápido demais. Confirme se não chamebatchCreate
para o mesmo usuário até que a chamada solicitação for concluída.- Os erros
429
exigem um atraso mínimo de30s
antes de uma nova tentativa. Use um espera exponencial de registros ao repetir solicitações. - Os erros
500
ocorrem quando o servidor encontra um erro. Ao fazer o upload, isso provavelmente ocorre devido a várias chamadas de gravação (comobatchCreate
) para o mesmo usuário ao mesmo tempo. Confira os detalhes sua solicitação e não faça chamadas parabatchCreate
em paralelo.
- Use o fluxo de upload retomável para tornar seus uploads mais robustos em caso de interrupções de rede, reduzindo uso de largura de banda, permitindo que você retome uploads parcialmente concluídos. Isso é importante ao fazer upload de dispositivos móveis de clientes ou de arquivos grandes.
Além disso, considere as dicas a seguir para cada etapa do processo de upload: upload de bytes e criação de itens de mídia.
Fazendo upload de bytes
- O upload de bytes (para recuperar tokens de upload) pode ser feito em paralelo.
- Sempre defina o tipo MIME correto no cabeçalho
X-Goog-Upload-Content-Type
para cada chamada de upload.
Como criar itens de mídia
Não faça chamadas em paralelo com
batchCreate
para um único usuário.- Para cada usuário, faça chamadas para
batchCreate
uma após a outra (em serial). - Para vários usuários, sempre faça chamadas
batchCreate
para cada usuário, um depois do outro. Só faça chamadas para usuários diferentes em paralelo.
- Para cada usuário, faça chamadas para
Inclua o máximo de
NewMediaItems
possível em cada chamada parabatchCreate
para minimizar o número total de chamadas que você tem fazer. Você pode incluir no máximo 50 itens.Defina um texto de descrição significativo. que foi criado pelos usuários. Não inclua metadados como nomes de arquivos, tags programáticas ou outros textos gerados automaticamente na descrição.
Exemplo de tutorial
Este exemplo usa pseudocódigo para orientar o upload de itens de mídia para vários usuários. O objetivo é delinear as duas etapas do processo de envio (fazer o upload de imagens bytes e como criar itens de mídia) e detalhar as práticas recomendadas para criar um upload eficiente e resiliente integração total.
Etapa 1: fazer o upload de bytes brutos
Primeiro, crie uma fila para fazer upload dos bytes brutos para seus itens de mídia de todos os seus
usuários. Acompanhe cada uploadToken
retornado por usuário. Lembre-se destes pontos principais:
- O número de threads de upload simultâneo depende do sistema operacional de nuvem.
- Considere reordenar a fila de upload conforme necessário. Por exemplo, é possível priorize os uploads com base no número de uploads restantes por usuário, uma progresso geral do usuário ou outros requisitos.
Pseudocódigo
CREATE uploadQueue FROM users, filesToUpload // Upload media bytes in parallel. START multiple THREADS WHILE uploadQueue is not empty POP uploadQueue UPLOAD file for user GET uploadToken CHECK and HANDLE errors STORE uploadToken for user in uploadTokensQueue END
Etapa 2: criar itens de mídia
Na etapa 1, é possível fazer o upload de vários bytes de vários usuários em paralelo, mas Etapa 2, só é possível fazer uma chamada para cada usuário de cada vez.
Pseudocódigo
// For each user, create media items once 50 upload tokens have been // saved, or no more uploads are left per user. WHEN uploadTokensQueue for user is >= 50 OR no more pending uploads for user // Calls can be made in parallel for different users, // but only make a single call per user at a time. START new thread for (this) user if there is no thread yet POP 50 uploadTokens from uploadTokensQueue for user CALL mediaItems.batchCreate with uploadTokens WAIT UNTIL batchCreate call has completed CHECK and HANDLE errors (retry as needed) DONE.
Continue esse processo até que todos os uploads e chamadas de criação de mídia sejam concluídos.