Dateidaten hochladen

Mit der Google Drive API können Sie Dateidaten hochladen, wenn Sie ein File Weitere Informationen zum Erstellen eines Nur-Metadaten-Dateien erstellen, z. B. ein Ordner.

Es gibt drei Arten von Uploads:

  • Einfacher Upload (uploadType=media): Mit diesem Uploadtyp können Sie ein Kleine Mediendatei (maximal 5 MB) ohne Metadaten. Um eine einfachen Upload durchführen.

  • Mehrteiliger Upload (uploadType=multipart): Mit diesem Uploadtyp können Sie Übertragen Sie eine kleine Datei (maximal 5 MB) zusammen mit Metadaten, die den -Datei in einer einzigen Anfrage. Wie Sie einen mehrteiligen Upload durchführen, erfahren Sie unter ein mehrteiliger Upload.

  • Fortsetzbarer Upload (uploadType=resumable): Verwenden Sie diesen Uploadtyp für große Dateien (über 5 MB) und bei hoher Wahrscheinlichkeit Unterbrechung, z. B. wenn eine Datei über eine mobile App erstellt wird. Fortsetzbar Uploads sind auch eine gute Wahl für die meisten Anwendungen, da sie auch für kleine Dateien zu einem minimalen Preis von einer zusätzlichen HTTP-Anfrage pro Upload. Informationen zum Durchführen eines fortsetzbaren Uploads finden Sie unter Fortsetzbare hochladen.

Die Google API-Client-Bibliotheken implementieren mindestens einen dieser Uploads. Weitere Informationen finden Sie in der Clientbibliothek. Dokumentation finden Sie weitere Informationen dazu, wie Sie verwenden Sie jeden der Typen.

PATCH statt PUT verwenden

Zur Erinnerung: Das HTTP-Verb PATCH unterstützt eine teilweise Aktualisierung der Dateiressource Das HTTP-Verb PUT hingegen unterstützt den vollständigen Ersetzen von Ressourcen. Hinweis: PUT kann funktionsgefährdende Änderungen beim Hinzufügen eines neuen Felds zu einer vorhandenen Ressource führen.

Beachten Sie beim Hochladen einer Dateiressource die folgenden Richtlinien:

  • Verwenden Sie das in der API-Referenz dokumentierte HTTP-Verb für die erste Anfrage von einen fortsetzbaren Upload oder die einzige Anfrage eines einfachen oder mehrteiligen Uploads.
  • Verwenden Sie PUT für alle nachfolgenden Anfragen für einen fortsetzbaren Upload, sobald -Anfrage hat begonnen. Bei diesen Anträgen werden Inhalte hochgeladen, aufgerufen wird.

Einfachen Upload durchführen

Verwenden Sie für einen einfachen Upload die Methode Methode files.create mit uploadType=media.

Im Folgenden wird gezeigt, wie Sie einen einfachen Upload durchführen:

HTTP

  1. Erstellen Sie mit der Abfrage eine POST-Anfrage an den /upload-URI der Methode. Parameter von uploadType=media:

    POST https://www.googleapis.com/upload/drive/v3/files?uploadType=media

  2. Fügen Sie die Daten der Datei in den Anfragetext ein.

  3. Fügen Sie diese HTTP-Header hinzu:

    • Content-Type Legen Sie als Wert den MIME-Medientyp des zu erstellenden Objekts fest. hochgeladen.
    • Content-Length Legen Sie als Wert die Anzahl der hochgeladenen Bytes fest. Wenn Sie aufgeteilter Transferverschlüsselung verwendet, ist dieser Header nicht erforderlich.
  4. Senden Sie die Anfrage. Wenn die Anfrage erfolgreich ist, gibt der Server den Statuscode HTTP 200 OK zusammen mit den Metadaten der Datei zurück. {HTTP}

Wenn Sie einen einfachen Upload durchführen, werden grundlegende Metadaten und einige Attribute erstellt. aus der Datei abgeleitet werden, z. B. der MIME-Typ oder modifiedTime. Sie können wenn Sie kleine Dateien haben und die Metadaten der Datei nicht wichtig.

Mehrteiligen Upload durchführen

Mit einer mehrteiligen Uploadanfrage können Sie Metadaten und Daten in denselben Verwenden Sie diese Option, wenn die gesendeten Daten klein genug sind, um einen erneuten Upload durchzuführen. in der Gesamtheit, wenn die Verbindung fehlschlägt.

Für einen mehrteiligen Upload verwenden Sie die Methode Methode files.create mit uploadType=multipart.

Im Folgenden wird gezeigt, wie Sie einen mehrteiligen Upload durchführen:

Java

drive/snippets/drive_v3/src/main/java/UploadBasic.java
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.FileContent;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;

/* Class to demonstrate use of Drive insert file API */
public class UploadBasic {

  /**
   * Upload new file.
   *
   * @return Inserted file metadata if successful, {@code null} otherwise.
   * @throws IOException if service account credentials file not found.
   */
  public static String uploadBasic() throws IOException {
    // Load pre-authorized user credentials from the environment.
    // TODO(developer) - See https://developers.google.com/identity for
    // guides on implementing OAuth2 for your application.
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    Drive service = new Drive.Builder(new NetHttpTransport(),
        GsonFactory.getDefaultInstance(),
        requestInitializer)
        .setApplicationName("Drive samples")
        .build();
    // Upload file photo.jpg on drive.
    File fileMetadata = new File();
    fileMetadata.setName("photo.jpg");
    // File's content.
    java.io.File filePath = new java.io.File("files/photo.jpg");
    // Specify media type and file-path for file.
    FileContent mediaContent = new FileContent("image/jpeg", filePath);
    try {
      File file = service.files().create(fileMetadata, mediaContent)
          .setFields("id")
          .execute();
      System.out.println("File ID: " + file.getId());
      return file.getId();
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      System.err.println("Unable to upload file: " + e.getDetails());
      throw e;
    }
  }
}

Python

drive/snippets/drive-v3/file_snippet/upload_basic.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from googleapiclient.http import MediaFileUpload


def upload_basic():
  """Insert new file.
  Returns : Id's of the file uploaded

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create drive api client
    service = build("drive", "v3", credentials=creds)

    file_metadata = {"name": "download.jpeg"}
    media = MediaFileUpload("download.jpeg", mimetype="image/jpeg")
    # pylint: disable=maybe-no-member
    file = (
        service.files()
        .create(body=file_metadata, media_body=media, fields="id")
        .execute()
    )
    print(f'File ID: {file.get("id")}')

  except HttpError as error:
    print(f"An error occurred: {error}")
    file = None

  return file.get("id")


if __name__ == "__main__":
  upload_basic()

Node.js

drive/snippets/drive_v3/file_snippets/upload_basic.js
/**
 * Insert new file.
 * @return{obj} file Id
 * */
async function uploadBasic() {
  const fs = require('fs');
  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});
  const requestBody = {
    name: 'photo.jpg',
    fields: 'id',
  };
  const media = {
    mimeType: 'image/jpeg',
    body: fs.createReadStream('files/photo.jpg'),
  };
  try {
    const file = await service.files.create({
      requestBody,
      media: media,
    });
    console.log('File Id:', file.data.id);
    return file.data.id;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

drive/snippets/drive_v3/src/DriveUploadBasic.php
use Google\Client;
use Google\Service\Drive;
# TODO - PHP client currently chokes on fetching start page token
function uploadBasic()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $fileMetadata = new Drive\DriveFile(array(
        'name' => 'photo.jpg'));
        $content = file_get_contents('../files/photo.jpg');
        $file = $driveService->files->create($fileMetadata, array(
            'data' => $content,
            'mimeType' => 'image/jpeg',
            'uploadType' => 'multipart',
            'fields' => 'id'));
        printf("File ID: %s\n", $file->id);
        return $file->id;
    } catch(Exception $e) {
        echo "Error Message: ".$e;
    } 

}

.NET

drive/snippets/drive_v3/DriveV3Snippets/UploadBasic.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Services;

namespace DriveV3Snippets
{
    // Class to demonstrate use of Drive insert file API
    public class UploadBasic
    {
        /// <summary>
        /// Upload new file.
        /// </summary>
        /// <param name="filePath">Image path to upload.</param>
        /// <returns>Inserted file metadata if successful, null otherwise.</returns>
        public static string DriveUploadBasic(string filePath)
        {
            try
            {
                /* Load pre-authorized user credentials from the environment.
                 TODO(developer) - See https://developers.google.com/identity for
                 guides on implementing OAuth2 for your application. */
                GoogleCredential credential = GoogleCredential.GetApplicationDefault()
                    .CreateScoped(DriveService.Scope.Drive);

                // Create Drive API service.
                var service = new DriveService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Drive API Snippets"
                });

                // Upload file photo.jpg on drive.
                var fileMetadata = new Google.Apis.Drive.v3.Data.File()
                {
                    Name = "photo.jpg"
                };
                FilesResource.CreateMediaUpload request;
                // Create a new file on drive.
                using (var stream = new FileStream(filePath,
                           FileMode.Open))
                {
                    // Create a new file, with metadata and stream.
                    request = service.Files.Create(
                        fileMetadata, stream, "image/jpeg");
                    request.Fields = "id";
                    request.Upload();
                }

                var file = request.ResponseBody;
                // Prints the uploaded file id.
                Console.WriteLine("File ID: " + file.Id);
                return file.Id;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else if (e is FileNotFoundException)
                {
                    Console.WriteLine("File not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

HTTP

  1. Erstellen Sie mit der Abfrage eine POST-Anfrage an den /upload-URI der Methode. Parameter von uploadType=multipart:

    POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart

  2. Erstellen Sie den Anfragetext. Formatieren Sie den Textkörper gemäß Multipart/ähnlicher Inhaltstyp RFC 2387, besteht aus zwei Teilen:

    • Metadaten: Die Metadaten müssen an erster Stelle stehen und eine Content-Type haben Header auf application/json; charset=UTF-8 festgelegt. Metadaten der Datei hinzufügen im JSON-Format.
    • Medien. Die Medien müssen an zweiter Stelle stehen und einen Content-Type-Header haben eines beliebigen MIME-Typs. Fügen Sie die Daten der Datei dem Medienteil hinzu.

    Identifizieren Sie jeden Teil mit einem Begrenzungsstring, dem zwei Bindestriche vorangestellt sind. In Fügen Sie nach dem endgültigen Grenzstring zwei Bindestriche hinzu.

  3. Fügen Sie die folgenden HTTP-Header der obersten Ebene hinzu:

    • Content-Type Auf multipart/related festlegen und Begrenzung einschließen den Sie verwenden, um die verschiedenen Teile der Anfrage zu identifizieren. Für Beispiel: Content-Type: multipart/related; boundary=foo_bar_baz
    • Content-Length. Setzen Sie den Wert auf die Gesamtanzahl von Byte im Anfragetext.
  4. Senden Sie die Anfrage.

Wenn Sie nur den Metadatenteil ohne die zugehörigen Daten erstellen oder aktualisieren möchten, Senden Sie eine POST- oder PATCH-Anfrage an den Standardressourcenendpunkt: https://www.googleapis.com/drive/v3/files Wenn die Anfrage erfolgreich ist, gibt der Server den Statuscode HTTP 200 OK zusammen mit dem Feld Metadaten.

Beim Erstellen von Dateien sollten sie eine Dateiendung im name der Datei angeben ein. Sie können beispielsweise beim Erstellen einer JPEG-Fotodatei etwas angeben, wie "name": "photo.jpg" in den Metadaten. Nachfolgende Aufrufe von files.get geben das schreibgeschützte Attribut fileExtension zurück die die ursprünglich im Feld name angegebene Erweiterung enthält.

Fortsetzbaren Upload durchführen

Mit einem fortsetzbaren Upload können Sie einen Uploadvorgang nach einer Kommunikation fortsetzen unterbricht den Datenfluss. Da kein großer Neustart erforderlich ist, von Anfang an hochladen, können fortsetzbare Uploads auch die Bandbreite verringern, bei einem Netzwerkfehler.

Fortsetzbare Uploads sind nützlich, wenn Ihre Dateigrößen stark variieren können oder gibt es ein festes Zeitlimit für Anfragen (wie Hintergrundaufgaben und bestimmte App Engine-Anfragen). Sie können auch fortsetzbare Uploads in denen eine Fortschrittsanzeige für den Upload angezeigt werden soll.

Ein fortsetzbarer Upload umfasst mehrere übergeordnete Schritte:

  1. Senden Sie die erste Anfrage und rufen Sie den URI der fortsetzbaren Sitzung ab.
  2. Laden Sie die Daten hoch und überwachen Sie den Uploadstatus.
  3. Optional: Wenn der Upload unterbrochen wird, setze den Upload fort.

Senden Sie die ursprüngliche Anfrage.

Um einen fortsetzbaren Upload zu starten, verwenden Sie den Methode files.create mit uploadType=resumable.

HTTP

  1. Erstellen Sie mit der Abfrage eine POST-Anfrage an den /upload-URI der Methode. Parameter von uploadType=resumable:

    POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable

    Wenn die Initiierungsanfrage erfolgreich war, enthält die Antwort einen 200 OK HTTP-Statuscode. Außerdem enthält es einen Location-Header, der gibt den URI der fortsetzbaren Sitzung an:

    HTTP/1.1 200 OK
    Location: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=xa298sd_sdlkj2
    Content-Length: 0
    

    Speichern Sie den URI der fortsetzbaren Sitzung, damit Sie die Dateidaten hochladen und abfragen können. den Upload-Status. Der URI einer fortsetzbaren Sitzung läuft nach einer Woche ab.

  2. Wenn Sie Metadaten für die Datei haben, fügen Sie sie in den Anfragetext ein im JSON-Format. Ansonsten lassen Sie den Anfragetext leer.

  3. Fügen Sie diese HTTP-Header hinzu:

    • X-Upload-Content-Type. Optional. Legen Sie als Wert den MIME-Typ der Dateidaten fest, die in nachfolgenden Anfragen übertragen werden. Wenn der MIME-Typ der Daten nicht in den Metadaten oder über diesen Header angegeben ist, Das Objekt wird als application/octet-stream. bereitgestellt.
    • X-Upload-Content-Length. Optional. Legen Sie als Anzahl der Byte die in nachfolgenden Anfragen übertragen werden.
    • Content-Type. Dies ist erforderlich, wenn Sie Metadaten für die Datei haben. Festlegen auf application/json;, charset=UTF-8.
    • Content-Length Erforderlich, sofern Sie nicht die aufgeteilte Transferverschlüsselung verwenden. Legen Sie als Wert die Anzahl der Byte im Text dieser ersten Anfrage fest.
  4. Senden Sie die Anfrage. Wenn die Anfrage zum Starten der Sitzung erfolgreich war, Antwort den Statuscode 200 OK HTTP enthält. Außerdem ist die Antwort enthält einen Location-Header, der den URI der fortsetzbaren Sitzung angibt. Verwenden Sie den URI der fortsetzbaren Sitzung, um die Dateidaten hochzuladen und den Upload-Status. Der URI einer fortsetzbaren Sitzung läuft nach einer Woche ab.

  5. Kopieren und speichern Sie die URL der fortsetzbaren Sitzung.

  6. Fahren Sie mit Inhalt hochladen fort.

Inhalte hochladen

Es gibt zwei Möglichkeiten, eine Datei mit einer fortsetzbaren Sitzung hochzuladen:

  • Inhalte in einer einzelnen Anfrage hochladen: Verwenden Sie diesen Ansatz, wenn die Datei in einem einzigen Antrag hochgeladen werden, wenn es kein oder es muss keine Statusanzeige für den Upload angezeigt werden. Dieses ist am besten geeignet, da er weniger Anfragen erfordert und zu besseren die Leistung.
  • Inhalte in mehreren Abschnitten hochladen: Diese Methode eignet sich für die bei einer einzelnen Anfrage übertragene Daten zu reduzieren. Möglicherweise benötigen Sie um die Menge der übertragenen Daten zu reduzieren, wenn es ein festes Zeitlimit für einzelne -Anfragen, wie dies bei bestimmten Klassen von App Engine-Anfragen der Fall sein kann. Dieser Ansatz ist auch nützlich, wenn Sie um den Uploadfortschritt anzuzeigen.

HTTP – Einzelanfrage

  1. Erstellen Sie eine PUT-Anfrage an den URI der fortsetzbaren Sitzung.
  2. Fügen Sie die Daten der Datei in den Anfragetext ein.
  3. Fügen Sie einen Content-Length-HTTP-Header hinzu, der auf die Anzahl der Byte in der Datei festgelegt ist.
  4. Senden Sie die Anfrage. Wenn die Uploadanfrage unterbrochen wird oder Sie eine 5xx, folgen Sie der Anleitung unter Unterbrochenen Upload fortsetzen.

HTTP – mehrere Anfragen

  1. Erstellen Sie eine PUT-Anfrage an den URI der fortsetzbaren Sitzung.

  2. Fügen Sie die Daten des Teils in den Anfragetext ein. Erstellen Sie Blöcke mit Vielfachen von 256 KB (256 x 1024 Byte) groß, mit Ausnahme des letzten abgeschlossenen Teils für den Upload. Halten Sie die Blockgröße so groß wie möglich, damit der Upload effizient zu gestalten.

  3. Fügen Sie diese HTTP-Header hinzu:

    • Content-Length. Legen Sie als Wert die Anzahl von Bytes im aktuellen Teil fest.
    • Content-Range Legen Sie fest, dass angezeigt werden soll, welche Byte in der Datei hochgeladen werden. Für Beispiel: Content-Range: bytes 0-524287/2000000 zeigt, dass Sie die ersten 524.288 Byte (256 x 1024 x 2) in einer 2.000.000 Byte großen Datei.
  4. Senden Sie die Anfrage und verarbeiten Sie die Antwort. Wenn die Uploadanfrage unterbrochen wurde oder wenn Sie eine 5xx-Antwort erhalten, folgen Sie der Anleitung unter Unterbrochenen Upload fortsetzen

  5. Wiederholen Sie die Schritte 1 bis 4 für jeden noch in der Datei verbleibenden Block. Verwenden Sie die Methode Range-Header in der Antwort, um zu bestimmen, wo der nächste Teil beginnt. Gehen Sie nicht davon aus, dass der Server alle Bytes erhalten hat, die in der vorherigen Anfrage gesendet wurden.

Wenn der gesamte Dateiupload abgeschlossen ist, erhalten Sie eine 200 OK- oder 201 Created-Antwort zusammen mit allen Metadaten, die mit der Ressource verknüpft sind.

Unterbrochenen Upload fortsetzen

Wenn eine Uploadanfrage vor einer Antwort beendet wird oder Sie eine 503 Service Unavailable-Antwort erhalten, müssen Sie den unterbrochenen Upload fortsetzen.

HTTP

  1. Zum Anfordern des Uploadstatus erstellen Sie eine leere PUT-Anfrage an den URI der fortsetzbaren Sitzung.

  2. Fügen Sie einen Content-Range-Header hinzu, um anzugeben, dass die aktuelle Position im Datei ist unbekannt. Setzen Sie beispielsweise Content-Range auf */2000000, wenn Ihr die gesamte Dateilänge beträgt 2.000.000 Byte. Wenn Sie nicht wissen, wie groß der legen Sie für Content-Range den Wert */* fest.

  3. Senden Sie die Anfrage.

  4. Antwort verarbeiten:

    • Eine 200 OK- oder 201 Created-Antwort gibt an, dass der Upload abgeschlossen wurde und keine weiteren Maßnahmen erforderlich sind.
    • Eine 308 Resume Incomplete-Antwort gibt an, dass Sie fortfahren müssen um die Datei hochzuladen.
    • Die Antwort 404 Not Found gibt an, dass die Uploadsitzung abgelaufen ist und muss der Upload neu gestartet werden.
  5. Wenn Sie eine 308 Resume Incomplete-Antwort erhalten haben, verarbeiten Sie das Range-Header der Antwort, um zu bestimmen, welche Byte der Server empfangen hat. Wenn die Antwort hat keinen Range-Header und es wurden keine Byte empfangen. Beispiel: Der Header Range mit dem Wert bytes=0-42 gibt an, dass der erste 43 Byte der Datei wurden empfangen und der nächste Block, der hochgeladen werden soll beginnen mit Byte 44.

  6. Sie wissen nun, wo Sie den Upload fortsetzen müssen. Fahren Sie nun mit dem Hochladen der Datei fort. beginnend mit dem nächsten Byte. Fügen Sie Folgendes ein: Content-Range-Header, um anzugeben, welchen Teil der Datei Sie senden. Für Beispiel: Content-Range: bytes 43-1999999 bedeutet, dass Sie 44 bis 2.000.000 Byte senden.

Fehler beim Hochladen von Medien beheben

Beachten Sie beim Hochladen von Medien die folgenden Best Practices, um Fehler zu vermeiden:

  • Bei 5xx Fehlern Uploads fortsetzen oder noch einmal versuchen, die aufgrund der Verbindung fehlschlagen Unterbrechungen. Weitere Informationen zum Umgang mit 5xx-Fehlern finden Sie unter 500-, 502-, 503- und 504-Fehler.
  • Versuchen Sie bei 403 rate limit Fehlern, den Upload noch einmal durchzuführen. Weitere Informationen zu Umgang mit 403 rate limit-Fehlern, siehe Fehler 403: rateLimitExceeded
  • Starte für alle 4xx-Fehler (einschließlich 403) während eines fortsetzbaren Uploads neu für den Upload. Diese Fehler weisen darauf hin, dass die Uploadsitzung abgelaufen ist und durch Anfordern eines neuen Sitzungs-URI neu gestartet. Sitzungen hochladen laufen nach einer Woche Inaktivität ab.

In Google Docs-Typen importieren

Wenn Sie eine Datei in Google Drive erstellen, können Sie die Datei in einen Google Workspace-Dateityp wie Google Docs oder Google Tabellen. Vielleicht möchten Sie ein Dokument aus aus Ihrem bevorzugten Textverarbeitungsprogramm in Docs umwandeln. Funktionen.

Wenn Sie eine Datei in einen bestimmten Google Workspace-Dateityp konvertieren möchten, geben Sie die Methode Google Workspace mimeType beim Erstellen der Datei.

Im Folgenden wird gezeigt, wie Sie eine CSV-Datei in eine Google Workspace-Tabelle konvertieren:

Java

drive/snippets/drive_v3/src/main/java/UploadWithConversion.java
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.FileContent;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;

/* Class to demonstrate Drive's upload with conversion use-case. */
public class UploadWithConversion {

  /**
   * Upload file with conversion.
   *
   * @return Inserted file id if successful, {@code null} otherwise.
   * @throws IOException if service account credentials file not found.
   */
  public static String uploadWithConversion() throws IOException {
    // Load pre-authorized user credentials from the environment.
    // TODO(developer) - See https://developers.google.com/identity for
    // guides on implementing OAuth2 for your application.
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    Drive service = new Drive.Builder(new NetHttpTransport(),
        GsonFactory.getDefaultInstance(),
        requestInitializer)
        .setApplicationName("Drive samples")
        .build();

    // File's metadata.
    File fileMetadata = new File();
    fileMetadata.setName("My Report");
    fileMetadata.setMimeType("application/vnd.google-apps.spreadsheet");

    java.io.File filePath = new java.io.File("files/report.csv");
    FileContent mediaContent = new FileContent("text/csv", filePath);
    try {
      File file = service.files().create(fileMetadata, mediaContent)
          .setFields("id")
          .execute();
      System.out.println("File ID: " + file.getId());
      return file.getId();
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      System.err.println("Unable to move file: " + e.getDetails());
      throw e;
    }
  }
}

Python

drive/snippets/drive-v3/file_snippet/upload_with_conversion.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from googleapiclient.http import MediaFileUpload


def upload_with_conversion():
  """Upload file with conversion
  Returns: ID of the file uploaded

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create drive api client
    service = build("drive", "v3", credentials=creds)

    file_metadata = {
        "name": "My Report",
        "mimeType": "application/vnd.google-apps.spreadsheet",
    }
    media = MediaFileUpload("report.csv", mimetype="text/csv", resumable=True)
    # pylint: disable=maybe-no-member
    file = (
        service.files()
        .create(body=file_metadata, media_body=media, fields="id")
        .execute()
    )
    print(f'File with ID: "{file.get("id")}" has been uploaded.')

  except HttpError as error:
    print(f"An error occurred: {error}")
    file = None

  return file.get("id")


if __name__ == "__main__":
  upload_with_conversion()

Node.js

drive/snippets/drive_v3/file_snippets/upload_with_conversion.js
/**
 * Upload file with conversion
 * @return{obj} file Id
 * */
async function uploadWithConversion() {
  const fs = require('fs');
  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});
  const fileMetadata = {
    name: 'My Report',
    mimeType: 'application/vnd.google-apps.spreadsheet',
  };
  const media = {
    mimeType: 'text/csv',
    body: fs.createReadStream('files/report.csv'),
  };

  try {
    const file = await service.files.create({
      requestBody: fileMetadata,
      media: media,
      fields: 'id',
    });
    console.log('File Id:', file.data.id);
    return file.data.id;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

drive/snippets/drive_v3/src/DriveUploadWithConversion.php
use Google\Client;
use Google\Service\Drive;
function uploadWithConversion()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $fileMetadata = new Drive\DriveFile(array(
            'name' => 'My Report',
            'mimeType' => 'application/vnd.google-apps.spreadsheet'));
        $content = file_get_contents('../files/report.csv');
        $file = $driveService->files->create($fileMetadata, array(
            'data' => $content,
            'mimeType' => 'text/csv',
            'uploadType' => 'multipart',
            'fields' => 'id'));
        printf("File ID: %s\n", $file->id);
        return $file->id;
    } catch(Exception $e) {
        echo "Error Message: ".$e;
    }

}

.NET

drive/snippets/drive_v3/DriveV3Snippets/UploadWithConversion.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Services;

namespace DriveV3Snippets
{
    // Class to demonstrate Drive's upload with conversion use-case.
    public class UploadWithConversion
    {
        /// <summary>
        /// Upload file with conversion.
        /// </summary>
        /// <param name="filePath">Id of the spreadsheet file.</param>
        /// <returns>Inserted file id if successful, null otherwise.</returns>
        public static string DriveUploadWithConversion(string filePath)
        {
            try
            {
                /* Load pre-authorized user credentials from the environment.
                 TODO(developer) - See https://developers.google.com/identity for
                 guides on implementing OAuth2 for your application. */
                GoogleCredential credential = GoogleCredential.GetApplicationDefault()
                    .CreateScoped(DriveService.Scope.Drive);

                // Create Drive API service.
                var service = new DriveService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Drive API Snippets"
                });

                // Upload file My Report on drive.
                var fileMetadata = new Google.Apis.Drive.v3.Data.File()
                {
                    Name = "My Report",
                    MimeType = "application/vnd.google-apps.spreadsheet"
                };
                FilesResource.CreateMediaUpload request;
                // Create a new drive.
                using (var stream = new FileStream(filePath,
                           FileMode.Open))
                {
                    // Create a new file, with metadata and stream.
                    request = service.Files.Create(
                        fileMetadata, stream, "text/csv");
                    request.Fields = "id";
                    request.Upload();
                }

                var file = request.ResponseBody;
                // Prints the uploaded file id.
                Console.WriteLine("File ID: " + file.Id);
                return file.Id;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else if (e is FileNotFoundException)
                {
                    Console.WriteLine("File not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

Wenn Sie herausfinden möchten, ob eine Conversion verfügbar ist, sehen Sie sich vor dem Erstellen der Datei das Array importFormats der Ressource about an. Unterstützte Conversions sind in diesem Array dynamisch verfügbar. Einige gängige Importformate sind:

FromAn
Microsoft Word, OpenDocument Text, HTML, RTF, Nur-TextGoogle Docs
Microsoft Excel, OpenDocument-Tabelle, CSV, TSV, Nur-TextGoogle Sheets
Microsoft PowerPoint, OpenDocument-PräsentationGoogle Präsentationen
JPEG, PNG, GIF, BMP, PDFGoogle Docs (das Bild wird in ein Dokument eingebettet)
Nur-Text (spezieller MIME-Typ), JSONGoogle Apps Script

Wenn Sie Medien während einer update-Anfrage in einen Google Docs-, Google Tabellen- oder Google Präsentationen-Datei der vollständige Inhalt des Dokuments ersetzt wird.

Wenn Sie ein Bild in das Google Docs-Format konvertieren, verwendet Drive Optische Zeichenerkennung (Optical Character Recognition, OCR) zum Konvertieren des Bildes in Text. Sie können Verbesserung der Qualität des OCR-Algorithmus durch Angabe des anwendbaren BCP 47 Sprachcode in der ocrLanguage . Der extrahierte Text wird im Dokument neben dem eingebetteten Bild angezeigt.

Vorgefertigte ID zum Hochladen von Dateien verwenden

Mit der Drive API können Sie eine Liste vorgenerierter Datei-IDs abrufen, die werden zum Hochladen und Erstellen von Ressourcen verwendet. Upload- und Dateierstellungsanfragen können diese vorgefertigten IDs verwenden. Legen Sie das Feld id in den Dateimetadaten fest.

Rufen Sie zum Erstellen von vorgenerierten IDs den folgenden Befehl auf: files.generateIds durch den die Anzahl der zu erstellenden IDs.

Sie können Uploads mit vorab generierten IDs sicher wiederholen, wenn es Serverfehler oder Zeitüberschreitung. Wurde die Datei erfolgreich erstellt, Wiederholungsversuche führen zu einem HTTP 409-Fehler und es werden keine doppelten Dateien erstellt.

Indexierbaren Text für unbekannte Dateitypen definieren

Nutzer können über die Drive-Benutzeroberfläche nach Dokumentinhalten suchen. Sie können auch files.list und fullText verwenden um nach Inhalten aus Ihrer App zu suchen. Weitere Informationen finden Sie unter Suche nach Dateien und Ordner.

Drive indexiert Dokumente für die Suche automatisch, wenn es erkennt den Dateityp, einschließlich Textdokumenten, PDFs, Bildern mit Text und und andere gängige Typen. Wenn Ihre App andere Dateitypen speichert, z. B. Zeichnungen, Videos und Verknüpfungen), können Sie die Auffindbarkeit verbessern, indem Sie Indexierbarer Text im Feld contentHints.indexableText der Datei ein.

Weitere Informationen zu indexiertem Text finden Sie unter Datei verwalten Metadaten.