A API Google Drive permite fazer upload de dados de arquivos ao criar ou atualizar um
File
. Para informações sobre como criar um arquivo somente de metadados, como uma pasta, consulte Criar arquivos somente de metadados.
Há três tipos de uploads que você pode fazer:
Upload simples (
uploadType=media
): use esse tipo de upload para transferir um arquivo de mídia pequeno (5 MB ou menos) sem fornecer metadados. Para fazer um upload simples, consulte Fazer um upload simples.Upload de várias partes (
uploadType=multipart
): "Use esse tipo de upload para transferir um arquivo pequeno (5 MB ou menos) com metadados que descrevem o arquivo em uma única solicitação. Para fazer um upload de várias partes, consulte Fazer um upload de várias partes.Upload retomável (
uploadType=resumable
): use esse tipo de upload para arquivos grandes (mais de 5 MB) e quando houver uma alta probabilidade de interrupção da rede, como ao criar um arquivo em um app para dispositivos móveis. Os uploads retomáveis também são uma boa opção para a maioria dos aplicativos porque também funcionam para arquivos pequenos com um custo mínimo de uma solicitação HTTP adicional por upload. Para fazer um upload retomável, consulte Fazer um upload retomável.
As bibliotecas de cliente da API do Google implementam pelo menos um desses tipos de upload. Consulte a documentação da biblioteca de cliente para mais detalhes sobre como usar cada um dos tipos.
Usar PATCH
x PUT
Como uma atualização, o verbo HTTP PATCH
aceita uma atualização parcial de recursos de arquivo, enquanto o verbo HTTP PUT
aceita a substituição completa de recursos. Observe que PUT
pode introduzir mudanças incompatíveis ao adicionar um novo campo a um recurso existente.
Ao fazer upload de um recurso de arquivo, siga estas diretrizes:
- Use o verbo HTTP documentado na referência da API para a solicitação inicial de um upload retomável ou para a única solicitação de um upload simples ou de várias partes.
- Use
PUT
para todas as solicitações subsequentes de um upload retomável depois que a solicitação for iniciada. Essas solicitações fazem upload de conteúdo, não importa o método chamado.
Fazer um upload simples
Para fazer um upload simples, use o método
files.create
com
uploadType=media
.
Confira a seguir como fazer um upload simples:
HTTP
Crie uma solicitação
POST
para o URI /upload do método com o parâmetro de consultauploadType=media
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=media
Adicione os dados do arquivo ao corpo da solicitação.
Adicione estes cabeçalhos HTTP:
Content-Type
. Defina como o tipo de mídia MIME do objeto que está sendo enviado.Content-Length
. Defina conforme o número de bytes do upload. Se você usar codificação de transferência fragmentada, esse cabeçalho não será necessário.
Envie a solicitação. Se a solicitação for bem-sucedida, o servidor retornará o código de status
HTTP 200 OK
junto com os metadados do arquivo. {HTTP}
Ao fazer um upload simples, metadados básicos são criados e alguns atributos
são inferidos do arquivo, como o tipo MIME ou modifiedTime
. Use um
upload simples quando tiver arquivos pequenos e os metadados não forem
importantes.
Fazer um upload de várias partes
Com uma solicitação de upload de várias partes, é possível fazer upload de metadados e dados na mesma solicitação. Use essa opção se os dados enviados forem pequenos o suficiente para serem enviados novamente por completo em caso de falha da conexão.
Para fazer um upload de várias partes, use o método
files.create
com
uploadType=multipart
.
Confira a seguir como fazer um upload em várias partes:
Java
Python
Node.js
PHP
.NET
HTTP
Crie uma solicitação
POST
para o URI /upload do método com o parâmetro de consultauploadType=multipart
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart
Crie o corpo da solicitação. Formate o corpo de acordo com o tipo de conteúdo multipart/related RFC 2387, que contém duas partes:
- Metadados. Os metadados precisam vir primeiro e ter um cabeçalho
Content-Type
definido comoapplication/json;
charset=UTF-8
. Adicione os metadados do arquivo no formato JSON. - Mídia. A mídia precisa vir depois e ter um cabeçalho
Content-Type
de qualquer tipo MIME. Adicione os dados do arquivo à parte de mídia.
Identifique cada parte com uma string limite, precedida por dois hifens. Além disso, adicione dois hifens depois da última string limite.
- Metadados. Os metadados precisam vir primeiro e ter um cabeçalho
Adicione estes cabeçalhos HTTP de nível superior:
Content-Type
. Defina comomultipart/related
e inclua a string de limite que você está usando para identificar as diferentes partes da solicitação. Por exemplo:Content-Type: multipart/related; boundary=foo_bar_baz
Content-Length
. Defina com o número total de bytes no corpo da solicitação.
Envie a solicitação.
Para criar ou atualizar apenas a parte de metadados, sem os dados associados,
envie uma solicitação POST
ou PATCH
para o endpoint de recurso padrão:
https://www.googleapis.com/drive/v3/files
Se a solicitação for bem-sucedida,
o servidor vai retornar o código de status HTTP 200 OK
junto com os metadados
do arquivo.
Ao criar arquivos, eles precisam especificar uma extensão no campo name
do arquivo. Por exemplo, ao criar um arquivo JPEG de foto, você pode especificar algo como "name": "photo.jpg"
nos metadados. As chamadas subsequentes para files.get
retornam a propriedade somente leitura fileExtension
que contém a extensão especificada originalmente no campo name
.
Fazer um upload retomável
Com um upload retomável, é possível retomar uma operação de upload quando uma falha de comunicação interrompe o fluxo de dados. Como não é necessário reiniciar os uploads de arquivos grandes desde o início, os uploads retomáveis também reduzem o uso da largura de banda em caso de falha de rede.
Os uploads retomáveis são úteis quando os tamanhos dos arquivos variam muito ou quando há um limite de tempo fixo para solicitações, como tarefas em segundo plano do SO móvel e determinadas solicitações do App Engine. Também é possível usar uploads retomáveis para situações em que você quer mostrar uma barra de progresso do upload.
Um upload retomável consiste em várias etapas de alto nível:
- Envie a solicitação inicial e recupere o URI da sessão retomável.
- Faça upload dos dados e monitore o estado do upload.
- (Opcional) Se o upload for interrompido, retome o processo.
Enviar a solicitação inicial
Para iniciar um upload retomável, use o método
files.create
com
uploadType=resumable
.
HTTP
Crie uma solicitação
POST
para o URI /upload do método com o parâmetro de consultauploadType=resumable
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable
Se a solicitação de início for bem-sucedida, a resposta vai incluir um código de status HTTP
200 OK
. Além disso, ela incluirá um cabeçalhoLocation
que especifica o URI da sessão retomável:HTTP/1.1 200 OK Location: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=xa298sd_sdlkj2 Content-Length: 0
Salve o URI da sessão retomável para fazer upload dos dados do arquivo e consultar o status da operação. Um URI de sessão retomável expira após uma semana.
Se você tiver os metadados do arquivo, adicione-os ao corpo da solicitação no formato JSON. Caso contrário, deixe o corpo em branco.
Adicione estes cabeçalhos HTTP:
X-Upload-Content-Type
: opcional. Defina como o tipo MIME dos dados de arquivo, que serão transferido nas solicitações subsequentes. Se o tipo MIME dos dados não for especificado nos metadados ou neste cabeçalho, o objeto será exibido comoapplication/octet-stream.
.X-Upload-Content-Length
: opcional. Defina como o número de bytes dos dados do arquivo, que serão transferidos nas solicitações subsequentes.Content-Type
: obrigatório se você tiver os metadados do arquivo. Defina comoapplication/json;
charset=UTF-8
.Content-Length
. Obrigatório, exceto se você usar a codificação de transferência fragmentada. Defina como o número de bytes no corpo dessa solicitação inicial.
Envie a solicitação. Se a solicitação de início da sessão for bem-sucedida, a resposta vai incluir um código de status
200 OK HTTP
. Além disso, a resposta inclui um cabeçalhoLocation
que especifica o URI da sessão retomável. Use o URI da sessão retomável para fazer upload dos dados do arquivo e consultar o status do upload. Um URI de sessão retomável expira após uma semana.Copie e salve o URL da sessão retomável.
Continue para Enviar o conteúdo.
Fazer upload do conteúdo
Há duas formas de fazer o upload de um arquivo com uma sessão retomável:
- Fazer upload de conteúdo em uma única solicitação: use essa abordagem quando o arquivo puder ser enviado em uma solicitação, se não houver um limite de tempo fixo para qualquer solicitação ou se você não precisar mostrar um indicador de progresso do upload. Essa abordagem é a melhor porque requer menos solicitações e resulta em melhor desempenho.
Faça upload do conteúdo em vários blocos: use essa abordagem se você precisar reduzir a quantidade de dados transferidos em uma única solicitação. Talvez seja necessário reduzir os dados transferidos quando há um limite de tempo fixo para solicitações individuais, como pode acontecer em determinadas classes de solicitações do App Engine. Essa abordagem também é útil se você precisar fornecer um indicador personalizado para mostrar o andamento do upload.
HTTP: solicitação única
- Crie uma solicitação
PUT
para o URI da sessão retomável. - Adicione os dados do arquivo ao corpo da solicitação.
- Adicione um cabeçalho HTTP Content-Length definido como o número de bytes no arquivo.
- Envie a solicitação. Se a solicitação de upload for interrompida ou você receber uma
resposta
5xx
, siga o procedimento em Retomar um upload interrompido.
HTTP: várias solicitações
Crie uma solicitação
PUT
para o URI da sessão retomável.Adicione os dados de cada parte ao corpo da solicitação. Crie partes com tamanho em múltiplos de 256 KB (256 x 1.024 bytes), exceto a parte final que conclui o upload. Esse tamanho precisa ser o maior possível para que o upload seja eficiente.
Adicione estes cabeçalhos HTTP:
Content-Length
: defina como o número de bytes na parte atual.Content-Range
. Defina para mostrar de quais bytes no arquivo você está fazendo upload. Por exemplo,Content-Range: bytes 0-524287/2000000
mostra que você faz upload dos primeiros 524.288 bytes (256 x 1.024 x 2) em um arquivo de 2 milhões de bytes.
Envie a solicitação e processe a resposta. Se a solicitação de upload for interrompida ou você receber uma resposta
5xx
, siga o procedimento em Retomar um upload interrompido.Repita as etapas 1 a 4 para cada parte restante do arquivo. Use o cabeçalho
Range
na resposta para determinar onde iniciar a próxima parte. Não suponha que o servidor recebeu todos os bytes enviados na solicitação anterior.
Quando o upload do arquivo inteiro estiver concluído, você vai receber uma resposta 200 OK
ou
201 Created
, além dos metadados associados ao recurso.
Retomar um upload interrompido
Se uma solicitação de upload for encerrada antes de receber uma resposta ou se você receber uma resposta 503
Service Unavailable
, será necessário retomar o upload interrompido.
HTTP
Para saber o status do upload, crie uma solicitação
PUT
vazia para o URI de sessão retomável.Adicione um cabeçalho
Content-Range
para indicar que a posição atual no arquivo é desconhecida. Por exemplo, definaContent-Range
como*/2000000
se o comprimento total do arquivo for de 2 milhões de bytes. Se você não souber o tamanho total do arquivo, definaContent-Range
como*/*
.Envie a solicitação.
Processe a resposta:
- Uma resposta
200 OK
ou201 Created
indica que o upload foi concluído e não é necessário realizar qualquer outra ação. - Uma resposta
308 Resume Incomplete
indica que você precisa continuar fazendo o upload do arquivo. - Uma resposta
404 Not Found
indica que a sessão de upload expirou e o upload precisa ser reiniciado desde o início.
- Uma resposta
Se você recebeu uma resposta
308 Resume Incomplete
, processe o cabeçalhoRange
da resposta para determinar quais bytes o servidor recebeu. Se a resposta não tiver um cabeçalhoRange
, nenhum byte foi recebido. Por exemplo, um cabeçalhoRange
com valorbytes=0-42
indica que os primeiros 43 bytes do arquivo foram recebidos e que o próximo bloco a ser enviado começaria com o byte 44.Agora que você sabe em que ponto retomar o upload, continue enviando o arquivo a partir do próximo byte. Inclua um cabeçalho
Content-Range
para indicar qual parte do arquivo você está enviando. Por exemplo,Content-Range: bytes 43-1999999
indica que você envia os bytes 44 a 2.000.000.
Resolver erros de upload de mídia
Ao fazer upload de mídia, siga estas práticas recomendadas para lidar com erros:
- Para erros
5xx
, retome ou repita os uploads que falharem devido a interrupções de conexão. Para mais informações sobre como lidar com erros5xx
, consulte Erros 500, 502, 503 e 504. - Para erros
403 rate limit
, tente fazer o upload novamente. Para mais informações sobre como lidar com erros de403 rate limit
, consulte Erro 403:rateLimitExceeded
. - Para qualquer erro
4xx
(incluindo403
) durante um upload retomável, reinicie o upload. Esses erros indicam que a sessão de upload expirou e precisa ser reiniciada solicitando um novo URI de sessão. As sessões de upload também expiram após uma semana de inatividade.
Tipos de importação para os Documentos Google
Ao criar um arquivo no Drive, talvez você queira convertê-lo em um tipo de arquivo do Google Workspace, como Documentos ou Planilhas Google. Por exemplo, talvez você queira transformar um documento do seu editor de texto favorito em um documento do Google para aproveitar os recursos dele.
Para converter um arquivo em um tipo específico do Google Workspace, especifique o
mimeType
do Google Workspace ao criar o arquivo.
Confira a seguir como converter um arquivo CSV em uma planilha do Google Workspace:
Java
Python
Node.js
PHP
.NET
Para saber se uma conversão está disponível, verifique a matriz importFormats
do recurso about
antes de criar o arquivo.
As conversões aceitas estão disponíveis de forma dinâmica nessa matriz. Alguns formatos de importação comuns são:
De | Para |
---|---|
Microsoft Word, OpenDocument Text, HTML, RTF, texto simples | Documentos Google |
Microsoft Excel, planilha OpenDocument, CSV, TSV, texto simples | Planilhas Google |
Microsoft PowerPoint, Apresentação OpenDocument | Apresentações Google |
JPEG, PNG, GIF, BMP, PDF | Documentos Google (incorpora a imagem em um documento) |
Texto simples (tipo MIME especial), JSON | Google Apps Script |
Quando você faz upload e converte mídia durante uma solicitação update
para um arquivo dos apps Documentos, Planilhas ou Apresentações, todo o conteúdo do documento é substituído.
Quando você converte uma imagem em um documento do Google, o Drive usa o reconhecimento óptico de caracteres (OCR) para converter a imagem em texto. Você pode melhorar a qualidade do algoritmo de OCR especificando o código de idioma BCP 47 aplicável no parâmetro ocrLanguage
. O texto extraído aparece no documento ao lado da imagem incorporada.
Usar um ID pré-gerado para fazer upload de arquivos
A API Drive permite recuperar uma lista de IDs de arquivos pré-gerados que são usados para fazer upload e criar recursos. As solicitações de upload e criação de arquivos podem
usar esses IDs pré-gerados. Defina o campo id
nos metadados do arquivo.
Para criar IDs pré-gerados, chame
files.generateIds
com o
número de IDs a serem criados.
É possível tentar fazer uploads novamente com segurança usando IDs pré-gerados se houver um erro de servidor ou um tempo limite indeterminado. Se o arquivo for criado com sucesso, as novas
tentativas vão retornar um erro HTTP 409
e não vão criar arquivos duplicados.
Definir texto indexável para tipos de arquivo desconhecidos
Os usuários podem usar a interface do Drive para encontrar conteúdo do documento. Você também pode usar files.list
e o campo fullText
para pesquisar conteúdo do seu app. Para mais informações, consulte Pesquisar arquivos e pastas.
O Drive indexa automaticamente os documentos para pesquisa quando reconhece o tipo de arquivo, incluindo documentos de texto, PDFs, imagens com texto e outros tipos comuns. Se o app salvar outros tipos de arquivos (como desenhos,
vídeos e atalhos), você poderá melhorar a capacidade de descoberta fornecendo
texto indexável no campo contentHints.indexableText
do arquivo.
Para mais informações sobre texto indexável, consulte Gerenciar metadados de arquivos.