L'API Google Drive ti consente di caricare i dati dei file quando crei o aggiorni un
File
. Per informazioni su come creare un file
solo con metadati, ad esempio una cartella, vedi Creare file solo con metadati.
Puoi eseguire tre tipi di caricamenti:
Caricamento semplice (
uploadType=media
): utilizza questo tipo di caricamento per trasferire un file multimediale di piccole dimensioni (5 MB o meno) senza fornire metadati. Per eseguire un caricamento semplice, consulta Eseguire un caricamento semplice.Caricamento in più parti (
uploadType=multipart
): "Utilizza questo tipo di caricamento per trasferire un file di piccole dimensioni (5 MB o meno) insieme ai metadati che descrivono il file in un'unica richiesta. Per eseguire un caricamento multiparte, consulta Eseguire un caricamento multiparte.Caricamento ripristinabile (
uploadType=resumable
): utilizza questo tipo di caricamento per file di grandi dimensioni (superiori a 5 MB) e quando è elevata la probabilità di interruzione della rete, ad esempio quando crei un file da un'app mobile. I caricamenti ripristinabili sono una buona scelta anche per la maggior parte delle applicazioni, perché funzionano anche per i file di piccole dimensioni con un costo minimo di una richiesta HTTP aggiuntiva per caricamento. Per eseguire un caricamento ripristinabile, consulta Eseguire un caricamento ripristinabile.
Le librerie client dell'API di Google implementano almeno uno di questi tipi di caricamento. Per ulteriori dettagli su come utilizzare ciascun tipo, consulta la documentazione della libreria client.
Utilizzo di PATCH
e PUT
Per ripassare, il verbo HTTP PATCH
supporta un aggiornamento parziale della risorsa file,
mentre il verbo HTTP PUT
supporta la sostituzione completa della risorsa. Tieni presente che PUT
può introdurre modifiche che causano interruzioni quando aggiungi un nuovo campo a una risorsa esistente.
Quando carichi una risorsa file, segui queste linee guida:
- Utilizza il verbo HTTP documentato nel riferimento API per la richiesta iniziale di un caricamento ripristinabile o per l'unica richiesta di un caricamento semplice o multiparte.
- Utilizza
PUT
per tutte le richieste successive per un caricamento ripristinabile una volta avviata la richiesta. Queste richieste caricano contenuti indipendentemente dal metodo chiamato.
Eseguire un caricamento semplice
Per eseguire un caricamento semplice, utilizza il
metodo files.create
con
uploadType=media
.
Di seguito viene mostrato come eseguire un caricamento semplice:
HTTP
Crea una richiesta
POST
all'URI /upload del metodo con il parametro di queryuploadType=media
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=media
Aggiungi i dati del file al corpo della richiesta.
Aggiungi queste intestazioni HTTP:
Content-Type
. Imposta il tipo di media MIME dell'oggetto da caricare.Content-Length
. Imposta il numero di byte che carichi. Se utilizzi la codifica del trasferimento chunked, questa intestazione non è obbligatoria.
Invia la richiesta. Se la richiesta riesce, il server restituisce il codice di stato
HTTP 200 OK
insieme ai metadati del file. {HTTP}
Quando esegui un caricamento semplice, vengono creati metadati di base e alcuni attributi
vengono dedotti dal file, ad esempio il tipo MIME o modifiedTime
. Puoi utilizzare
un semplice caricamento nei casi in cui hai file di piccole dimensioni e i metadati dei file non sono
importanti.
Eseguire un caricamento multiparte
Una richiesta di caricamento in più parti consente di caricare metadati e dati nella stessa richiesta. Utilizza questa opzione se i dati che invii sono abbastanza piccoli da essere caricati di nuovo, nella loro interezza, in caso di errore di connessione.
Per eseguire un caricamento in più parti, utilizza il metodo
files.create
con
uploadType=multipart
.
Di seguito viene mostrato come eseguire un caricamento in più parti:
Java
Python
Node.js
PHP
.NET
HTTP
Crea una richiesta
POST
all'URI /upload del metodo con il parametro di queryuploadType=multipart
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart
Crea il corpo della richiesta. Formatta il corpo in base al tipo di contenuti multipart/related RFC 2387, che contiene due parti:
- Metadati. I metadati devono essere i primi e devono avere un'intestazione
Content-Type
impostata suapplication/json;
charset=UTF-8
. Aggiungi i metadati del file in formato JSON. - Media. Il media deve essere il secondo elemento e deve avere un'intestazione
Content-Type
di qualsiasi tipo MIME. Aggiungi i dati del file alla parte relativa ai contenuti multimediali.
Identifica ogni parte con una stringa di delimitazione, preceduta da due trattini. Inoltre, aggiungi due trattini dopo la stringa di delimitazione finale.
- Metadati. I metadati devono essere i primi e devono avere un'intestazione
Aggiungi queste intestazioni HTTP di primo livello:
Content-Type
. Imposta sumultipart/related
e includi la stringa di delimitazione che utilizzi per identificare le diverse parti della richiesta. Ad esempio:Content-Type: multipart/related; boundary=foo_bar_baz
Content-Length
. Impostato sul numero totale di byte nel corpo della richiesta.
Invia la richiesta.
Per creare o aggiornare solo la parte dei metadati, senza i dati associati, invia una richiesta POST
o PATCH
all'endpoint della risorsa standard: https://www.googleapis.com/drive/v3/files
Se la richiesta ha esito positivo, il server restituisce il codice di stato HTTP 200 OK
insieme ai metadati del file.
Quando creano i file, devono specificare un'estensione nel campo name
del file. Ad esempio, quando crei un file JPEG di una foto, potresti specificare qualcosa
come "name": "photo.jpg"
nei metadati. Le chiamate successive a files.get
restituiscono la proprietà fileExtension
di sola lettura
contenente l'estensione specificata originariamente nel campo name
.
Eseguire un caricamento ripristinabile
Un caricamento ripristinabile consente di riprendere un'operazione di caricamento dopo che un errore di comunicazione interrompe il flusso di dati. Poiché non devi riavviare i caricamenti di file di grandi dimensioni dall'inizio, i caricamenti ripristinabili possono anche ridurre l'utilizzo della larghezza di banda in caso di errore di rete.
I caricamenti ripristinabili sono utili quando le dimensioni dei file possono variare notevolmente o quando esiste un limite di tempo fisso per le richieste (ad esempio le attività in background del sistema operativo mobile e alcune richieste App Engine). Puoi anche utilizzare i caricamenti ripristinabili per situazioni in cui vuoi mostrare una barra di avanzamento del caricamento.
Un caricamento ripristinabile è costituito da diversi passaggi di alto livello:
- Invia la richiesta iniziale e recupera l'URI della sessione ripristinabile.
- Carica i dati e monitora lo stato del caricamento.
- (facoltativo) Se il caricamento viene interrotto, riprendilo.
Inviare la richiesta iniziale
Per avviare un caricamento ripristinabile, utilizza il
metodo files.create
con
uploadType=resumable
.
HTTP
Crea una richiesta
POST
all'URI /upload del metodo con il parametro di queryuploadType=resumable
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable
Se la richiesta di inizializzazione va a buon fine, la risposta include un codice di stato HTTP
200 OK
. Inoltre, include un'intestazioneLocation
che specifica l'URI della sessione ripristinabile:HTTP/1.1 200 OK Location: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=xa298sd_sdlkj2 Content-Length: 0
Salva l'URI della sessione ripristinabile per poter caricare i dati del file ed eseguire query sullo stato del caricamento. L'URI di una sessione ripristinabile scade dopo una settimana.
Se hai metadati per il file, aggiungili al corpo della richiesta in formato JSON. In caso contrario, lascia vuoto il corpo della richiesta.
Aggiungi queste intestazioni HTTP:
X-Upload-Content-Type
. Facoltativo. Impostato sul tipo MIME dei dati del file, che vengono trasferiti nelle richieste successive. Se il tipo MIME dei dati non è specificato nei metadati o tramite questa intestazione, l'oggetto viene pubblicato comeapplication/octet-stream.
X-Upload-Content-Length
. Facoltativo. Impostato sul numero di byte dei dati del file, che vengono trasferiti nelle richieste successive.Content-Type
. Obbligatorio se hai metadati per il file. Impostato suapplication/json;
charset=UTF-8
.Content-Length
. Obbligatorio, a meno che tu non utilizzi la codifica di trasferimento chunked. Impostato sul numero di byte nel corpo di questa richiesta iniziale.
Invia la richiesta. Se la richiesta di inizializzazione della sessione riesce, la risposta include un codice di stato
200 OK HTTP
. Inoltre, la risposta include un'intestazioneLocation
che specifica l'URI della sessione ripristinabile. Utilizza l'URI della sessione ripristinabile per caricare i dati del file ed eseguire query sullo stato del caricamento. L'URI di una sessione ripristinabile scade dopo una settimana.Copia e salva l'URL della sessione ripristinabile.
Continua a caricare i contenuti.
Carica i contenuti
Esistono due modi per caricare un file con una sessione ripristinabile:
- Carica i contenuti in un'unica richiesta: utilizza questo approccio quando il file può essere caricato in un'unica richiesta, se non è previsto un limite di tempo fisso per ogni singola richiesta o se non è necessario visualizzare un indicatore di avanzamento del caricamento. Questo approccio è il migliore perché richiede meno richieste e offre prestazioni migliori.
Carica i contenuti in più blocchi: utilizza questo approccio se devi ridurre la quantità di dati trasferiti in una singola richiesta. Potresti dover ridurre i dati trasferiti quando è presente un limite di tempo fisso per le singole richieste, come può accadere per determinate classi di richieste App Engine. Questo approccio è utile anche se devi fornire un indicatore personalizzato per mostrare l'avanzamento del caricamento.
HTTP - singola richiesta
- Crea una richiesta
PUT
all'URI della sessione ripristinabile. - Aggiungi i dati del file al corpo della richiesta.
- Aggiungi un'intestazione HTTP Content-Length, impostata sul numero di byte del file.
- Invia la richiesta. Se la richiesta di caricamento viene interrotta o se ricevi una risposta
5xx
, segui la procedura descritta in Riprendere un caricamento interrotto.
HTTP - multiple requests
Crea una richiesta
PUT
all'URI della sessione ripristinabile.Aggiungi i dati del blocco al corpo della richiesta. Crea blocchi di dimensioni multiple di 256 KB (256 x 1024 byte), ad eccezione dell'ultimo blocco che completa il caricamento. Mantieni le dimensioni dei chunk il più grandi possibile in modo che il caricamento sia efficiente.
Aggiungi queste intestazioni HTTP:
Content-Length
. Imposta il numero di byte nel chunk corrente.Content-Range
. Imposta la visualizzazione dei byte nel file che carichi. Ad esempio,Content-Range: bytes 0-524287/2000000
mostra che carichi i primi 524.288 byte (256 x 1024 x 2) in un file di 2.000.000 di byte.
Invia la richiesta ed elabora la risposta. Se la richiesta di caricamento viene interrotta o se ricevi una risposta
5xx
, segui la procedura descritta in Riprendere un caricamento interrotto.Ripeti i passaggi da 1 a 4 per ogni blocco rimanente nel file. Utilizza l'intestazione
Range
nella risposta per determinare da dove iniziare il blocco successivo. Non dare per scontato che il server abbia ricevuto tutti i byte inviati nella richiesta precedente.
Al termine del caricamento dell'intero file, riceverai una risposta 200 OK
o
201 Created
, insieme a tutti i metadati associati alla risorsa.
Riprendere un caricamento interrotto
Se una richiesta di caricamento viene interrotta prima di una risposta o se ricevi una risposta 503
Service Unavailable
, devi riprendere il caricamento interrotto.
HTTP
Per richiedere lo stato del caricamento, crea una richiesta
PUT
vuota all'URI della sessione ripristinabile.Aggiungi un'intestazione
Content-Range
per indicare che la posizione corrente nel file è sconosciuta. Ad esempio, impostaContent-Range
su*/2000000
se la lunghezza totale del file è 2.000.000 byte. Se non conosci le dimensioni complete del file, impostaContent-Range
su*/*
.Invia la richiesta.
Elabora la risposta:
- Una risposta
200 OK
o201 Created
indica che il caricamento è stato completato e non sono necessarie ulteriori azioni. - Una risposta
308 Resume Incomplete
indica che devi continuare a caricare il file. - Una risposta
404 Not Found
indica che la sessione di caricamento è scaduta e il caricamento deve essere riavviato dall'inizio.
- Una risposta
Se hai ricevuto una risposta
308 Resume Incomplete
, elabora l'intestazioneRange
della risposta per determinare quali byte ha ricevuto il server. Se la risposta non ha un'intestazioneRange
, non sono stati ricevuti byte. Ad esempio, un'intestazioneRange
dibytes=0-42
indica che i primi 43 byte del file sono stati ricevuti e che il successivo blocco da caricare inizierà con il byte 44.Ora che sai da dove riprendere il caricamento, continua a caricare il file a partire dal byte successivo. Includi un'intestazione
Content-Range
per indicare quale parte del file invii. Ad esempio,Content-Range: bytes 43-1999999
indica che invii i byte da 44 a 2.000.000.
Gestire gli errori di caricamento dei contenuti multimediali
Quando carichi contenuti multimediali, segui queste best practice per gestire gli errori:
- Per gli errori
5xx
, riprendi o riprova i caricamenti non riusciti a causa di interruzioni della connessione. Per ulteriori informazioni sulla gestione degli errori5xx
, consulta Errori 500, 502, 503, 504. - Per gli errori
403 rate limit
, riprova a caricare il file. Per ulteriori informazioni sulla gestione degli errori403 rate limit
, consulta Errore 403:rateLimitExceeded
. - Per eventuali errori
4xx
(incluso403
) durante un caricamento ripristinabile, riavvia il caricamento. Questi errori indicano che la sessione di caricamento è scaduta e deve essere riavviata richiedendo un nuovo URI di sessione. Anche le sessioni di caricamento scadono dopo una settimana di inattività.
Importare nei tipi di Documenti Google
Quando crei un file in Drive, potresti volerlo convertire in un tipo di file Google Workspace, ad esempio Documenti o Fogli Google. Ad esempio, potresti voler trasformare un documento dal tuo elaboratore di testi preferito in un documento Google per sfruttare le sue funzionalità.
Per convertire un file in un tipo di file Google Workspace specifico, specifica
Google Workspace mimeType
durante la creazione del file.
Di seguito viene illustrato come convertire un file CSV in un foglio Google Workspace:
Java
Python
Node.js
PHP
.NET
Per verificare se è disponibile una conversione, controlla l'array importFormats
della risorsa about
prima di creare il file.
Le conversioni supportate sono disponibili dinamicamente in questo array. Alcuni formati di importazione comuni sono:
Da | A |
---|---|
Microsoft Word, OpenDocument Text, HTML, RTF, testo normale | Documenti Google |
Microsoft Excel, foglio di lavoro OpenDocument, CSV, TSV, testo normale | Fogli Google |
Microsoft PowerPoint, Presentazione OpenDocument | Presentazioni Google |
JPEG, PNG, GIF, BMP, PDF | Documenti Google (incorpora l'immagine in un documento) |
Testo normale (tipo MIME speciale), JSON | Google Apps Script |
Quando carichi e converti contenuti multimediali durante una richiesta update
in un file
Documenti, Fogli o Presentazioni, i
contenuti completi del documento vengono sostituiti.
Quando converti un'immagine in un documento, Drive utilizza
il riconoscimento ottico dei caratteri (OCR) per convertire l'immagine in testo. Puoi
migliorare la qualità dell'algoritmo OCR specificando il codice lingua BCP
47 applicabile
nel parametro
ocrLanguage
. Il testo estratto viene visualizzato nel documento insieme all'immagine incorporata.
Utilizzare un ID pregenerato per caricare i file
L'API Drive consente di recuperare un elenco di ID file pregenerati che
vengono utilizzati per caricare e creare risorse. Le richieste di caricamento e creazione di file possono
utilizzare questi ID pregenerati. Imposta il campo id
nei metadati del file.
Per creare ID pregenerati, chiama
files.generateIds
con il
numero di ID da creare.
Puoi riprovare a caricare in modo sicuro con ID pregenerati se si verifica un errore
o un timeout del server indeterminato. Se il file è stato creato correttamente, i tentativi successivi
restituiscono un errore HTTP 409
e non creano file duplicati.
Definire il testo indicizzabile per i tipi di file sconosciuti
Gli utenti possono utilizzare l'interfaccia utente di Drive per trovare i contenuti dei documenti. Puoi anche
utilizzare files.list
e il campo fullText
per cercare contenuti dalla tua app. Per ulteriori informazioni, consulta Cercare
file e cartelle.
Drive indicizza automaticamente i documenti per la ricerca quando
riconosce il tipo di file, inclusi documenti di testo, PDF, immagini con testo e
altri tipi comuni. Se la tua app salva altri tipi di file (come disegni,
video e scorciatoie), puoi migliorare la rilevabilità fornendo
testo indicizzabile nel campo contentHints.indexableText
del file.
Per saperne di più sul testo indicizzabile, consulta Gestire i metadati dei file.