L'API Google Drive vous permet d'importer des données de fichier lorsque vous créez ou mettez à jour un File
. Pour savoir comment créer un objet File
ne contenant que des métadonnées, consultez la page Créer des fichiers.
Vous pouvez importer trois types de vidéos:
Importation simple (
uploadType=media
) : utilisez ce type d'importation pour transférer un petit fichier multimédia (5 Mo ou moins) sans fournir de métadonnées. Pour effectuer une importation simple, consultez la section Effectuer une importation simple.Importation en plusieurs parties (
uploadType=multipart
) : utilisez ce type d'importation pour transférer un petit fichier (5 Mo ou moins) avec des métadonnées décrivant le fichier, en une seule requête. Pour effectuer une importation en plusieurs parties, reportez-vous à la section Effectuer une importation en plusieurs parties.Importation avec reprise (
uploadType=resumable
) : utilisez ce type d'importation pour les fichiers volumineux (supérieurs à 5 Mo) et en cas d'interruption élevée du réseau, par exemple lorsque vous créez un fichier à partir d'une application mobile. Les importations avec reprise sont également un bon choix pour la plupart des applications, car elles fonctionnent également avec des petits fichiers pour un coût minimal d'une requête HTTP supplémentaire par importation. Pour effectuer une importation avec reprise, consultez la section Effectuer une importation avec reprise.
Les bibliothèques clientes des API Google mettent en œuvre au moins l'un de ces types d'importations. Reportez-vous à la documentation de la bibliothèque cliente pour en savoir plus sur l'utilisation de chacun de ces types.
Utilisez PATCH
par rapport à PUT
Pour rappel, le verbe HTTP PATCH
autorise la mise à jour partielle des ressources de fichiers, tandis que le verbe HTTP PUT
permet le remplacement complet des ressources. Notez que PUT
peut introduire des modifications destructives lors de l'ajout d'un champ à une ressource existante.
Lorsque vous importez une ressource de fichier, suivez les consignes ci-dessous:
- Utilisez le verbe HTTP documenté dans la documentation de référence de l'API pour la requête initiale d'une importation avec reprise ou pour la seule requête d'importation simple ou en plusieurs parties.
- Utilisez
PUT
pour toutes les requêtes ultérieures d'importation avec reprise une fois que la requête a démarré. Ces requêtes importent du contenu, quelle que soit la méthode appelée.
Effectuer une importation simple
Pour effectuer une importation simple, utilisez la méthode files.create avec uploadType=media
.
Pour effectuer une importation simple, procédez comme suit:
HTTP
Créez une requête
POST
sur l'URI /upload de la méthode avec le paramètre de requêteuploadType=media
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=media
Ajoutez les données du fichier au corps de la requête.
Ajoutez ces en-têtes HTTP:
Content-Type
. Définissez le type de média MIME de l'objet importé.Content-Length
. Définissez le nombre d'octets que vous importez. Si vous utilisez l'encodage de transfert fragmenté, cet en-tête n'est pas obligatoire.
Envoyez la requête. Si la requête aboutit, le serveur affiche le code d'état
HTTP 200 OK
avec les métadonnées du fichier. {HTTP}
Lorsque vous effectuez une importation simple, des métadonnées de base sont créées et certains attributs sont déduits du fichier, tels que le type MIME ou modifiedTime
. Vous pouvez utiliser une importation simple lorsque vous avez des fichiers de petite taille et que les métadonnées de fichiers ne sont pas importantes.
Importer en plusieurs parties
Une requête d'importation en plusieurs parties vous permet d'importer des métadonnées et des données dans la même requête. Utilisez cette option si les données que vous envoyez sont suffisamment petites pour être réimportées, dans leur intégralité, en cas d'échec de la connexion.
Pour effectuer une importation en plusieurs parties, utilisez la méthode files.create avec uploadType=multipart
.
Pour effectuer une importation en plusieurs parties, procédez comme suit:
Java
Python
Node.js
PHP
.NET
HTTP
Créez une requête
POST
sur l'URI /upload de la méthode avec le paramètre de requêteuploadType=multipart
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart
Créez le corps de la requête. Mettez en forme le corps en fonction du type de contenu associé en plusieurs parties [RFC 2387], qui contient deux parties:
- Métadonnées. Les métadonnées doivent apparaître en premier et l'en-tête
Content-Type
doit être défini surapplication/json;
charset=UTF-8
. Ajoutez les métadonnées du fichier au format JSON. - Médias. Le contenu multimédia doit apparaître en deuxième position et comporter un en-tête
Content-Type
de n'importe quel type MIME. Ajoutez les données du fichier à la partie multimédia.
Identifiez chaque partie à l'aide d'une chaîne de délimitation, précédée de deux traits d'union. En outre, ajoutez deux traits d'union après la dernière chaîne de limite.
- Métadonnées. Les métadonnées doivent apparaître en premier et l'en-tête
Ajoutez ces en-têtes HTTP de premier niveau:
Content-Type
. Définissez la valeur surmultipart/related
et incluez la chaîne de limite que vous utilisez pour identifier les différentes parties de la requête. Exemple:Content-Type: multipart/related; boundary=foo_bar_baz
Content-Length
. Défini sur le nombre total d'octets dans le corps de la requête.
Envoyez la requête.
Pour créer ou mettre à jour la partie de métadonnées uniquement, sans les données associées, envoyez une requête POST
ou PATCH
au point de terminaison de la ressource standard : https://www.googleapis.com/drive/v3/files
Si la requête aboutit, le serveur renvoie le code d'état HTTP 200 OK
avec les métadonnées du fichier.
Lors de la création de fichiers, ils doivent spécifier une extension de fichier dans le champ name
du fichier. Par exemple, lorsque vous créez un fichier JPEG de photo, vous pouvez spécifier "name": "photo.jpg"
dans les métadonnées. Les appels suivants à files.get renvoient la propriété fileExtension
en lecture seule contenant l'extension spécifiée à l'origine dans le champ name
.
Effectuer une importation avec reprise
Une importation avec reprise vous permet de reprendre une opération d'importation après un échec de communication qui interrompt le flux de données. Comme vous n'avez pas besoin de redémarrer les importations de fichiers volumineux depuis le début, les importations avec reprise peuvent également réduire votre utilisation de la bande passante en cas de panne du réseau.
Les importations avec reprise sont utiles lorsque la taille de vos fichiers peut varier considérablement ou lorsque les requêtes (comme les tâches d'arrière-plan de l'OS mobile et certaines requêtes App Engine) sont soumises à une limite de temps fixe. Vous pouvez également utiliser les importations avec reprise pour les cas où vous souhaitez afficher une barre de progression de l'importation.
Une importation avec reprise comprend plusieurs étapes générales:
- Envoyez la requête initiale et récupérez l'URI de la session avec reprise.
- Importez les données et surveillez l'état d'importation.
- (Facultatif) Si l'importation est interrompue, reprenez l'importation.
Envoyer la requête initiale
Pour lancer une importation avec reprise, utilisez la méthode files.create avec uploadType=resumable
.
HTTP
Créez une requête
POST
sur l'URI /upload de la méthode avec le paramètre de requêteuploadType=resumable
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable
Si la requête d'initiation réussit, la réponse inclut un code d'état HTTP
200 OK
. Il inclut également un en-têteLocation
qui spécifie l'URI de la session avec reprise:HTTP/1.1 200 OK Location: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=xa298sd_sdlkj2 Content-Length: 0
Enregistrez l'URI de la session avec reprise afin de pouvoir importer les données du fichier et interroger l'état de l'importation. Un URI de session avec reprise expire au bout d'une semaine.
Si vous disposez de métadonnées pour le fichier, ajoutez-les au corps de la requête au format JSON. Sinon, laissez le corps de la requête vide.
Ajoutez ces en-têtes HTTP:
X-Upload-Content-Type
Facultatif. Défini sur le type MIME des données du fichier à transférer dans les requêtes ultérieures. Si le type MIME des données n'est pas spécifié dans les métadonnées ni via cet en-tête, l'objet est diffusé en tant queapplication/octet-stream.
.X-Upload-Content-Length
Facultatif. Définissez le nombre d'octets de données de fichier, qui seront transférés dans les requêtes ultérieures.Content-Type
. Obligatoire si vous disposez de métadonnées pour le fichier. Défini surapplication/json;
charset=UTF-8
.Content-Length
. Obligatoire, sauf si vous utilisez l'encodage de transfert fragmenté. Défini sur le nombre d'octets dans le corps de cette requête initiale.
Envoyez la requête. Si la requête de lancement de session aboutit, la réponse inclut un code d'état
200 OK HTTP
. En outre, la réponse inclut un en-têteLocation
qui spécifie l'URI de la session avec reprise. Utilisez l'URI de la session avec reprise pour importer les données du fichier et interroger l'état de l'importation. Un URI de session avec reprise expire au bout d'une semaine.Copiez et enregistrez l'URL de la session avec reprise.
Passez à la section Importer le contenu.
Importer le contenu
Il existe deux façons d'importer un fichier avec une session avec reprise:
- Importer le contenu dans une seule requête : utilisez cette approche lorsque le fichier peut être importé dans une requête unique, qu'il n'y a pas de limite de temps fixe pour une seule requête ou que vous n'avez pas besoin d'afficher un indicateur de progression de l'importation. Cette approche est préférable, car elle nécessite moins de requêtes et entraîne de meilleures performances.
Importer le contenu en plusieurs fragments : utilisez cette approche si vous devez réduire la quantité de données transférées dans une seule requête. Vous devrez peut-être réduire les données transférées en cas de limite de temps fixe pour des requêtes individuelles, comme cela peut être le cas pour certaines classes de requêtes App Engine. Cette approche est également utile si vous devez fournir un indicateur personnalisé pour indiquer la progression de l'importation.
HTTP : requête simple
- Créez une requête
PUT
vers l'URI de la session avec reprise. - Ajoutez les données du fichier au corps de la requête.
- Ajoutez un en-tête HTTP Content-length, défini sur le nombre d'octets du fichier.
- Envoyez la requête. Si la requête d'importation est interrompue ou si vous recevez une réponse
5xx
, suivez la procédure décrite dans la section Reprendre une importation interrompue.
HTTP : requêtes multiples
Créez une requête
PUT
vers l'URI de la session avec reprise.Ajoutez les données du fragment au corps de la requête. Créez des fragments par multiples de 256 Ko (256 x 1 024 octets), à l'exception du fragment final qui termine l'importation. La taille des fragments doit être aussi grande que possible pour que l'importation soit efficace.
Ajoutez ces en-têtes HTTP:
Content-Length
. Défini sur le nombre d'octets du fragment actuel.Content-Range
. Défini pour afficher les octets du fichier que vous importez. Par exemple,Content-Range: bytes 0-524287/2000000
montre que vous importez les 524 288 premiers octets (256 x 1 024 x 2) dans un fichier de 2 000 000 octets.
Envoyez la requête, puis traitez la réponse. Si la requête d'importation est interrompue ou si vous recevez une réponse
5xx
, suivez la procédure décrite dans la section Reprendre une importation interrompue.Répétez les étapes 1 à 4 pour chaque fragment restant dans le fichier. Utilisez l'en-tête
Range
dans la réponse pour déterminer où démarrer le prochain fragment. Ne partez pas du principe que le serveur a reçu tous les octets envoyés dans la requête précédente.
Une fois l'importation du fichier terminée, vous recevez une réponse 200 OK
ou 201 Created
, ainsi que toutes les métadonnées associées à la ressource.
Reprendre une importation interrompue
Si une requête d'importation se termine avant une réponse ou si vous recevez une réponse 503 Service Unavailable
, vous devez reprendre l'importation interrompue.
HTTP
Pour demander l'état de l'importation, créez une requête
PUT
vide à destination de l'URI de la session avec reprise.Ajoutez un en-tête
Content-Range
pour indiquer que la position actuelle dans le fichier est inconnue. Par exemple, définissezContent-Range
sur*/2000000
si la longueur totale de votre fichier correspond à 2 000 000 octets. Si vous ne connaissez pas la taille totale du fichier, définissezContent-Range
sur*/*
.Envoyez la requête.
Traitez la réponse:
- Une réponse
200 OK
ou201 Created
indique que l'importation a été effectuée et qu'aucune autre action n'est requise. - Une réponse
308 Resume Incomplete
indique que vous devez continuer à importer le fichier. - Une réponse
404 Not Found
indique que la session d'importation a expiré et que l'importation doit reprendre depuis le début.
- Une réponse
Si vous avez reçu une réponse
308 Resume Incomplete
, traitez l'en-têteRange
de la réponse pour déterminer les octets reçus par le serveur. Si la réponse ne comporte pas d'en-têteRange
, aucun octet n'a été reçu. Par exemple, un en-têteRange
debytes=0-42
indique que les 43 premiers octets du fichier ont été reçus et que le prochain fragment à importer commence par l'octet 44.Maintenant que vous savez où reprendre l'importation, continuez à importer le fichier à partir du premier octet. Incluez un en-tête
Content-Range
pour indiquer la partie du fichier que vous envoyez. Par exemple,Content-Range: bytes 43-1999999
indique que vous envoyez des octets 44 à 2 000 000.
Gérer les erreurs d'importation de fichiers multimédias
Lorsque vous importez des médias, suivez ces bonnes pratiques pour gérer les erreurs:
- Pour les erreurs
5xx
, réactivez ou relancez les importations qui échouent en raison d'interruptions de connexion. Pour en savoir plus sur la gestion des erreurs5xx
, consultez Résoudre une erreur5xx
. - Pour les erreurs
403 rate limit
, relancez l'importation. Pour en savoir plus sur la gestion des erreurs403 rate limit
, consultez Résoudre une erreur403 error: Rate limit exceeded
. - Pour les erreurs
4xx
(y compris403
) lors d'une importation avec reprise, redémarrez l'importation. Ces erreurs indiquent que la session d'importation a expiré et doivent être redémarrées en demandant un nouvel URI de session. Les sessions d'importation expirent également après une semaine d'inactivité.
Importer dans les types Google Docs
Lorsque vous créez un fichier dans Drive, vous pouvez le convertir en un type de fichier Google Workspace, tel qu'un document Google Docs ou une feuille de calcul Google Sheets. Par exemple, si vous souhaitez convertir un document de votre logiciel de traitement de texte préféré en document Google Docs afin de profiter de ses fonctionnalités,
Pour convertir un fichier en un type de fichier Google Workspace spécifique, spécifiez l'mimeType
de Google Workspace lors de la création du fichier.
Pour convertir un fichier CSV en feuille Google Workspace:
Java
Python
Node.js
PHP
.NET
Pour savoir si une conversion est disponible, consultez le tableau importFormats
de la ressource À propos avant de créer le fichier. Les conversions compatibles sont disponibles de manière dynamique dans ce tableau. Voici quelques formats d'importation courants:
De | Vers |
---|---|
Microsoft Word, OpenDocument Text, HTML, RTF, texte brut | Google Docs |
Microsoft Excel, feuille de calcul OpenDocument, CSV, TSV, texte brut | Google Sheets |
Microsoft PowerPoint, OpenDocument Presentation | Google Slides |
JPEG, PNG, GIF, BMP, PDF | Google Docs (intègre l'image dans un document Docs) |
Texte brut (type MIME spécial), JSON | Google Apps Script |
Lorsque vous importez et convertissez du contenu multimédia pendant une requête update
dans un document, une feuille de calcul ou une diapositive, l'intégralité du contenu du document est remplacée.
Lorsque vous convertissez une image en document, Drive utilise la reconnaissance optique des caractères (OCR) pour la convertir en texte. Vous pouvez améliorer la qualité de l'algorithme OCR en spécifiant le code de langue BCP 47 applicable dans le paramètre ocrLanguage
.
Le texte extrait apparaît dans le document à côté de l'image intégrée.
Utiliser un ID prégénéré pour importer des fichiers
L'API Drive vous permet de récupérer la liste des ID de fichier prégénérés utilisés pour importer et créer des ressources. Les requêtes d'importation et de création de fichier peuvent utiliser ces ID prégénérés. Définissez le champ id
dans les métadonnées du fichier.
Pour créer des ID prégénérés, appelez file.generateIds avec le nombre d'ID à créer.
Vous pouvez relancer des importations en toute sécurité avec des ID prégénérés en cas d'erreur ou de délai avant expiration indéterminé du serveur. Si le fichier a bien été créé, les tentatives suivantes renvoient une erreur HTTP 409
et ne créent pas de fichiers en double.
Définir du texte indexable pour les types de fichiers inconnus
L'interface utilisateur de Drive permet aux utilisateurs de rechercher du contenu dans un document. Vous pouvez également utiliser files.list et le champ fullText
pour rechercher du contenu dans votre application. Pour en savoir plus, consultez la page Rechercher des fichiers et des dossiers.
Drive indexe automatiquement les documents lors des recherches lorsqu'il reconnaît le type de fichier, y compris les documents texte, les PDF, les images avec du texte et d'autres types courants. Si votre application enregistre d'autres types de fichiers (tels que des dessins, des vidéos et des raccourcis), vous pouvez améliorer la visibilité en fournissant du texte indexable dans le champ contentHints.indexableText
du fichier.
Pour en savoir plus sur le texte indexable, consultez Gérer les métadonnées de fichiers.