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 metadati, ad esempio una cartella, consulta Creare file solo metadati.
Puoi eseguire tre tipi di caricamenti:
Caricamento semplice (
uploadType=media
): utilizza questo tipo di caricamento per trasferire un piccolo file multimediale (non più di 5 MB) senza fornire metadati. Per eseguire un caricamento semplice, consulta Eseguire un caricamento semplice.Caricamento suddiviso in più parti (
uploadType=multipart
): "Utilizza questo tipo di caricamento per trasferire un file di piccole dimensioni (fino a 5 MB) insieme ai metadati che lo descrivono in una singola richiesta. Per eseguire un caricamento multiparte, consulta la sezione Eseguire un caricamento multiparte.Caricamento con possibilità di ripresa (
uploadType=resumable
): utilizza questo tipo di caricamento per i 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 con possibilità di ripresa sono una buona scelta anche per la maggior parte delle applicazioni perché funzionano anche per i file di piccole dimensioni al costo minimo di un'ulteriore richiesta HTTP 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 caricamenti. Per ulteriori dettagli su come utilizzare ciascun tipo, consulta la documentazione della libreria client.
Utilizzare PATCH
rispetto a PUT
Ti ricordiamo che 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 comportano interruzioni quando aggiungi un nuovo campo a una risorsa esistente.
Quando carichi una risorsa file, segui queste linee guida:
- Utilizza il verbo HTTP documentato nella documentazione di riferimento dell'API per la richiesta iniziale di un caricamento riavviabile o per l'unica richiesta di un caricamento semplice o multiparte.
- Utilizza
PUT
per tutte le richieste successive di un caricamento riprendente una volta avviata la richiesta. Queste richieste caricano contenuti indipendentemente dal metodo chiamato.
Eseguire un semplice caricamento
Per eseguire un semplice caricamento, utilizza il metodo
files.create
con
uploadType=media
.
Di seguito viene mostrato come eseguire un semplice caricamento:
HTTP
Crea una richiesta
POST
all'URI /upload del metodo con il parametro 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
. Impostato sul tipo multimediale MIME dell'oggetto caricato.Content-Length
. Imposta il numero di byte caricati. Se utilizzi la codifica di trasferimento suddivisa in blocchi, 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 semplice caricamento, vengono creati metadati di base e alcuni attributi vengono dedotti dal file, ad esempio il tipo MIME o modifiedTime
. Puoi utilizzare un semplice caricamento se hai file di piccole dimensioni e i metadati dei file non sono importanti.
Eseguire un caricamento multiparte
Una richiesta di caricamento suddiviso ti consente di caricare metadati e dati nella stessa richiesta. Utilizza questa opzione se i dati inviati sono sufficientemente piccoli da poter essere caricati di nuovo, nella loro interezza, se la connessione non va a buon fine.
Per eseguire un caricamento suddiviso in più parti, utilizza il metodo
files.create
con
uploadType=multipart
.
Di seguito viene mostrato come eseguire un caricamento suddiviso in più parti:
Java
Python
Node.js
PHP
.NET
HTTP
Crea una richiesta
POST
all'URI /upload del metodo con il parametro 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. - Contenuti multimediali. I contenuti multimediali devono essere visualizzati per secondo e devono avere un'intestazione
Content-Type
di qualsiasi tipo MIME. Aggiungi i dati del file alla parte multimediale.
Identifica ogni parte con una stringa di confine, preceduta da due trattini. Inoltre, aggiungi due trattini dopo la stringa di confine finale.
- Metadati. I metadati devono essere i primi e devono avere un'intestazione
Aggiungi queste intestazioni HTTP di primo livello:
Content-Type
. Impostalo sumultipart/related
e includi la stringa di confine 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 va a buon fine,
il server restituisce il codice di stato HTTP 200 OK
insieme ai metadati del
file.
Quando creano 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 riprendebile ti consente di riprendere un'operazione di caricamento dopo che un errore di comunicazione ha interrotto il flusso di dati. Poiché non devi riavviare i caricamenti di file di grandi dimensioni dall'inizio, i caricamenti riavviabili possono anche ridurre l'utilizzo della larghezza di banda in caso di guasto della rete.
I caricamenti riavviabili sono utili quando le dimensioni dei file possono variare notevolmente o quando c'è un limite di tempo fisso per le richieste (ad esempio le attività in background del sistema operativo mobile e determinate richieste di App Engine). Puoi anche utilizzare i caricamenti riavviabili per le situazioni in cui vuoi mostrare una barra di avanzamento del caricamento.
Un caricamento riavviabile è costituito da diversi passaggi di alto livello:
- Invia la richiesta iniziale e recupera l'URI della sessione riassumibile.
- Carica i dati e monitora lo stato del caricamento.
- (Facoltativo) Se il caricamento viene interrotto, riprendilo.
Invia 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 queryuploadType=resumable
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable
Se la richiesta di avvio va a buon fine, la risposta include un codice di stato HTTP
200 OK
. Inoltre, include un'intestazioneLocation
che specifica l'URI della sessione riassumibile: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 riassumibile per poter caricare i dati del file e eseguire query sullo stato del caricamento. Un URI sessione riassumibile 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 degli oggetti non è specificato nei metadati o tramite questo intestazione, l'oggetto viene pubblicato comeapplication/octet-stream.
X-Upload-Content-Length
. Facoltativo. Impostato sul numero di byte di dati del file, che vengono trasferiti nelle richieste successive.Content-Type
. Obbligatorio se hai metadati per il file. Imposta suapplication/json;
charset=UTF-8
.Content-Length
. Obbligatorio, a meno che non utilizzi la codifica di trasferimento con chunking. Impostato sul numero di byte nel corpo di questa richiesta iniziale.
Invia la richiesta. Se la richiesta di inizializzazione della sessione va a buon fine, la risposta include un codice di stato
200 OK HTTP
. Inoltre, la risposta include un'intestazioneLocation
che specifica l'URI della sessione riassumibile. Utilizza l'URI della sessione riassumibile per caricare i dati del file ed eseguire query sullo stato del caricamento. Un URI sessione riassumibile scade dopo una settimana.Copia e salva l'URL della sessione riassumibile.
Vai a Caricare i contenuti.
Carica i contenuti
Esistono due modi per caricare un file con una sessione ripristinabile:
- Carica i contenuti in una singola richiesta: utilizza questo approccio quando il file può essere caricato in una richiesta, se non esiste un limite di tempo fisso per una singola richiesta o se non è necessario visualizzare un indicatore dell'avanzamento del caricamento. Questo approccio è il migliore perché richiede meno richieste e consente di ottenere migliori prestazioni.
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 esiste un limite di tempo fisso per le singole richieste, come può accadere per determinate classi di richieste di App Engine. Questo approccio è utile anche se devi fornire un indicatore personalizzato per mostrare lo stato di avanzamento del caricamento.
HTTP - singola richiesta
- Crea una richiesta
PUT
all'URI della sessione riavviabile. - 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 - più richieste
Crea una richiesta
PUT
all'URI della sessione riavviabile.Aggiungi i dati del chunk al corpo della richiesta. Crea chunk di dimensioni múltiplo di 256 KB (256 x 1024 byte), tranne il chunk finale che completa il caricamento. Mantieni la dimensione del chunk il più grande possibile in modo che il caricamento sia efficiente.
Aggiungi queste intestazioni HTTP:
Content-Length
. Impostato sul numero di byte nel chunk corrente.Content-Range
. Imposta per mostrare i byte del file che carichi. Ad esempio,Content-Range: bytes 0-524287/2000000
indica che carichi i primi 524.288 byte (256 x 1024 x 2) in un file di 2.000.000 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 chunk rimanente nel file. Utilizza l'intestazione
Range
nella risposta per determinare dove iniziare il prossimo chunk. 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 eventuali metadati associati alla risorsa.
Riprendere un caricamento interrotto
Se una richiesta di caricamento viene interrotta prima di ricevere 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 riassumibile.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 è di 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 che 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 sono stati ricevuti dal 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 prossimo chunk da caricare inizierà con il byte 44.Ora che sai dove riprendere il caricamento, continua a caricare il file iniziando dal byte successivo. Includi un'intestazione
Content-Range
per indicare la parte del file che 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 che non riescono a causa di interruzioni della connessione. Per ulteriori informazioni sulla gestione degli errori5xx
, consulta Errori 500, 502, 503, 504. - In caso di errori
403 rate limit
, riprova a eseguire il caricamento. Per ulteriori informazioni sulla gestione degli errori403 rate limit
, consulta Errore 403:rateLimitExceeded
. - In caso di 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 sessione. Anche le sessioni di caricamento scadono dopo una settimana di inattività.
Tipi di importazione in Documenti Google
Quando crei un file in Drive, potresti volerlo convertire in un tipo di file di Google Workspace, ad esempio Documenti o Fogli Google. Ad esempio, potresti voler trasformare un documento del tuo editor di testo preferito in un documento di Documenti per sfruttarne le funzionalità.
Per convertire un file in un tipo di file Google Workspace specifico, specifica Google Workspace mimeType
al momento della creazione del file.
Di seguito viene mostrato 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 in modo dinamico in questo array. Ecco alcuni formati di importazione comuni:
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, OpenDocument Presentation | Presentazioni Google |
JPEG, PNG, GIF, BMP, PDF | Documenti Google (l'immagine viene incorporata in un documento) |
Testo normale (tipo MIME speciale), JSON | Google Apps Script |
Quando carichi e converti contenuti multimediali durante una richiesta update
a un
file di 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 ti 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 in sicurezza i caricamenti 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 vengono creati 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 della tua app. Per saperne di più, 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 (ad esempio disegni, video e scorciatoie), puoi migliorare la rilevabilità fornendo testo indicizzato nel campo contentHints.indexableText
del file.
Per saperne di più sul testo indicizzato, consulta Gestire i metadati dei file.