Dateidaten hochladen

Mit der Google Drive API können Sie beim Erstellen oder Aktualisieren einer File Dateidaten hochladen. Informationen zum Erstellen einer reinen Metadatendatei, z. B. eines Ordners, finden Sie unter Reine Metadatendateien erstellen.

Es gibt drei Arten von Uploads, die Sie ausführen können:

  • Einfacher Upload (uploadType=media): Mit dieser Uploadmethode können Sie eine kleine Mediendatei (bis zu 5 MB) ohne Metadaten übertragen. Informationen zum Durchführen eines einfachen Uploads finden Sie unter Einfachen Upload durchführen.

  • Multipart-Upload (uploadType=multipart): „Verwenden Sie diesen Uploadtyp, um eine kleine Datei (maximal 5 MB) zusammen mit Metadaten, die die Datei beschreiben, in einer einzigen Anfrage zu übertragen. Informationen zum Durchführen eines mehrteiligen Uploads finden Sie unter Mehrteiligen Upload durchführen.

  • Fortsetzbarer Upload (uploadType=resumable): Verwenden Sie diesen Uploadtyp für große Dateien (über 5 MB) und wenn die Wahrscheinlichkeit einer Netzwerkunterbrechung hoch ist, z. B. wenn Sie eine Datei über eine mobile App erstellen. Fortsetzbare Uploads sind auch für die meisten Anwendungen eine gute Wahl, da sie zum Preis von nur einer zusätzlichen HTTP-Anfrage pro Upload auch für kleinere Dateien verwendet werden können. Informationen zum Durchführen eines fortsetzbaren Uploads finden Sie unter Fortsetzbaren Upload ausführen.

Die Google API-Clientbibliotheken implementieren mindestens einen dieser Uploadtypen. Weitere Informationen zur Verwendung der einzelnen Typen finden Sie in der Dokumentation zur Clientbibliothek.

PATCH im Vergleich zu PUT verwenden

Zur Erinnerung: Das HTTP-Verb PATCH unterstützt eine teilweise Aktualisierung von Dateiresourcen, während das HTTP-Verb PUT den vollständigen Ersatz von Ressourcen unterstützt. Beachten Sie, dass PUT zu inkompatiblen Änderungen führen kann, wenn einer vorhandenen Ressource ein neues Feld hinzugefügt wird.

Beachten Sie beim Hochladen einer Dateiresource die folgenden Richtlinien:

  • Verwenden Sie das in der API-Referenz dokumentierte HTTP-Verb für die erste Anfrage eines fortsetzbaren Uploads oder für die einzige Anfrage eines einfachen oder mehrteiligen Uploads.
  • Verwenden Sie PUT für alle nachfolgenden Anfragen für einen fortsetzbaren Upload, nachdem die Anfrage gestartet wurde. Bei diesen Anfragen werden Inhalte hochgeladen, unabhängig davon, welche Methode aufgerufen wird.

Einfachen Upload ausführen

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

Im Folgenden wird gezeigt, wie ein einfacher Upload durchgeführt wird:

HTTP

  1. Erstellen Sie eine POST-Anfrage an den /upload-URI der Methode mit dem Abfrageparameter 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 die folgenden HTTP-Header hinzu:

    • Content-Type. Legen Sie als Wert den MIME-Medientyp des Objekts fest, das hochgeladen wird.
    • Content-Length. Legen Sie als Wert die Anzahl der Byte fest, die Sie hochladen. Wenn Sie die aufgeteilte Transferverschlüsselung verwenden, ist dieser Header nicht erforderlich.
  4. Senden Sie die Anfrage. Ist die Anfrage erfolgreich, 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 erstellt und einige Attribute werden aus der Datei abgeleitet, z. B. der MIME-Typ oder modifiedTime. Sie können einen einfachen Upload verwenden, wenn Sie kleine Dateien haben und Dateimetadaten nicht wichtig sind.

Mehrteiligen Upload durchführen

Mit einer mehrteiligen Uploadanfrage können Sie Metadaten und Daten in derselben Anfrage hochladen. Verwenden Sie diese Option, wenn die gesendeten Daten klein genug sind, um sie bei einem Verbindungsfehler noch einmal komplett hochzuladen.

Verwenden Sie zum Ausführen eines mehrteiligen Uploads die Methode files.create mit uploadType=multipart.

Im Folgenden wird beschrieben, wie Sie einen Multipart-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
<?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 eine POST-Anfrage an den /upload-URI der Methode mit dem Abfrageparameter uploadType=multipart:

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

  2. Erstellen Sie den Text der Anfrage. Formatieren Sie den Text gemäß dem Inhaltstyp „multipart/related“ RFC 2387, der zwei Teile enthält:

    • Metadaten: Die Metadaten müssen zuerst angegeben werden und einen Content-Type-Header haben, der auf application/json; charset=UTF-8 gesetzt ist. Fügen Sie die Metadaten der Datei im JSON-Format hinzu.
    • Medien Die Medien müssen als Zweites angegeben werden und einen Content-Type-Header mit einem beliebigen MIME-Typ haben. Fügen Sie die Daten der Datei in den Medienteil ein.

    Identifizieren Sie jeden Teil mit einem Grenzstring, dem zwei Bindestriche vorangestellt sind. Fügen Sie außerdem nach dem finalen Grenzstring zwei Bindestriche hinzu.

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

    • Content-Type. Setzen Sie den Wert auf multipart/related und fügen Sie den Grenzstring ein, den Sie zum Identifizieren der verschiedenen Teile der Anfrage verwenden. 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 erstellen oder aktualisieren möchten, ohne die zugehörigen Daten, senden Sie eine POST- oder PATCH-Anfrage an den Standardressourcenendpunkt: https://www.googleapis.com/drive/v3/files. Ist die Anfrage erfolgreich, gibt der Server den Statuscode HTTP 200 OK zusammen mit den Metadaten der Datei zurück.

Beim Erstellen von Dateien sollte im Feld name der Datei eine Dateiendung angegeben werden. Wenn Sie beispielsweise eine JPEG-Datei für ein Foto erstellen, können Sie in den Metadaten etwas wie "name": "photo.jpg" angeben. Bei nachfolgenden Aufrufen von files.get wird die schreibgeschützte fileExtension-Eigenschaft zurückgegeben, die die ursprünglich im Feld name angegebene Erweiterung enthält.

Fortsetzbaren Upload ausführen

Mit einem fortsetzbaren Upload können Sie einen Uploadvorgang fortsetzen, nachdem ein Kommunikationsfehler den Datenfluss unterbrochen hat. Da Sie große Dateiuploads nicht von vorn beginnen müssen, können Sie mit fortsetzbaren Uploads die Bandbreitennutzung bei einem Netzwerkausfall reduzieren.

Fortsetzbare Uploads sind nützlich, wenn die Dateigrößen stark variieren können oder wenn es ein festes Zeitlimit für Anfragen gibt (z. B. bei Hintergrundaufgaben von mobilen Betriebssystemen und bestimmten App Engine-Anfragen). Fortsetzbare Uploads können auch verwendet werden, wenn Sie eine Fortschrittsanzeige für den Upload einblenden möchten.

Ein fortsetzbarer Upload besteht aus mehreren allgemeinen Schritten:

  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, setzen Sie ihn fort.

Erste Anfrage senden

Verwenden Sie zum Initiieren eines fortsetzbaren Uploads die Methode files.create mit uploadType=resumable.

HTTP

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

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

    Wenn die Anfrage zum Starten der Sitzung erfolgreich war, enthält die Antwort den HTTP-Statuscode 200 OK. Darüber hinaus enthält er einen Location-Header, der den URI der fortsetzbaren Sitzung angibt:

    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 den Uploadstatus abfragen können. Der URI einer fortsetzbaren Sitzung läuft nach einer Woche ab.

  2. Wenn Sie Metadaten für die Datei haben, fügen Sie diese dem Anfragetext im JSON-Format hinzu. Ansonsten lassen Sie den Anfragetext leer.

  3. Fügen Sie die folgenden 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, wird das Objekt als application/octet-stream. bereitgestellt.
    • X-Upload-Content-Length. Optional. Legen Sie als Wert die Anzahl von Bytes für die Dateidaten fest, die in nachfolgenden Anfragen übertragen werden.
    • Content-Type. Dies ist erforderlich, wenn Sie Metadaten für die Datei haben. Legen Sie application/json; charset=UTF-8 fest.
    • Content-Length. Dies ist erforderlich, sofern Sie nicht die aufgeteilte Transferverschlüsselung verwenden. Legen Sie als Wert die Anzahl von Byte fest, die im Text dieser ersten Anfrage vorhanden sind.
  4. Senden Sie die Anfrage. Wenn die Anfrage zum Starten der Sitzung erfolgreich war, enthält die Antwort den Statuscode 200 OK HTTP. Außerdem enthält die Antwort einen Location-Header, der den URI der fortsetzbaren Sitzung angibt. Verwenden Sie den URI der fortsetzbaren Sitzung, um die Dateidaten hochzuladen und den Uploadstatus abzufragen. Der URI einer fortsetzbaren Sitzung läuft nach einer Woche ab.

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

  6. Laden Sie die Inhalte hoch.

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 einer Anfrage hochgeladen werden kann, wenn für einzelne Anfragen kein festes Zeitlimit vorgegeben ist oder wenn Sie keine Fortschrittsanzeige für den Upload benötigen. Dieser Ansatz ist am besten geeignet, da er weniger Anfragen erfordert und zu einer besseren Leistung führt.
  • In mehreren Blöcken hochladen: Verwenden Sie diesen Ansatz, wenn Sie die Datenmenge reduzieren müssen, die bei einer einzelnen Anfrage übertragen wird. Möglicherweise müssen Sie die übertragenen Daten reduzieren, wenn für einzelne Anfragen eine feste Zeitbegrenzung vorliegt, wie es bei bestimmten Arten von App Engine-Anfragen der Fall sein kann. Diese Vorgehensweise ist auch nützlich, wenn Sie eine benutzerdefinierte Anzeige für den Uploadfortschritt bereitstellen müssen.

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 HTTP-Header „Content-Length“ hinzu, der auf die Anzahl der Byte in der Datei gesetzt ist.
  4. Senden Sie die Anfrage. Wenn die Uploadanfrage unterbrochen wird oder Sie eine 5xx-Antwort erhalten, 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 Teile in Vielfachen von 256 KB (256 x 1024 Byte), mit Ausnahme des letzten Teils, der den Upload vervollständigt. Halten Sie die Blockgröße so groß wie möglich, damit der Upload effizient ist.

  3. Fügen Sie die folgenden 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. Beispielsweise zeigt Content-Range: bytes 0-524287/2000000 an, dass die ersten 524.288 Byte (256 x 1024 x 2) in einer 2.000.000 Byte großen Datei hochgeladen werden.
  4. Senden Sie die Anfrage und verarbeiten Sie die Antwort. Wenn die Uploadanfrage unterbrochen wird oder Sie eine 5xx-Antwort erhalten, folgen Sie der Anleitung unter Unterbrochenen Upload fortsetzen.

  5. Wiederholen Sie die Schritte 1 bis 4 für jeden verbleibenden Teil der Datei. Verwenden Sie den Header Range in der Antwort, um festzulegen, wo der nächste Teil beginnt. Gehen Sie nicht davon aus, dass der Server alle in der vorherigen Anfrage gesendeten Bytes erhalten hat.

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 dem Erhalten 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, der anzeigt, dass die derzeitige Position in der Datei unbekannt ist. Setzen Sie beispielsweise Content-Range auf */2000000, wenn die Dateigröße insgesamt 2.000.000 Byte ist. Sollte die Gesamtgröße der Datei nicht bekannt sein, 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 das Hochladen der Datei fortsetzen müssen.
    • Eine 404 Not Found-Antwort gibt an, dass die Uploadsitzung abgelaufen ist und der Upload von vorn begonnen werden muss.
  5. Wenn Sie eine 308 Resume Incomplete-Antwort erhalten haben, verarbeiten Sie den Range-Header der Antwort, um zu ermitteln, welche Byte der Server empfangen hat. Wenn die Antwort keinen Range-Header hat, wurden keine Bytes empfangen. Der Header Range mit einem Wert von bytes=0-42 gibt beispielsweise an, dass die ersten 43 Byte der Datei empfangen wurden und der nächste hochzuladende Chunk mit Byte 44 beginnt.

  6. Fahren Sie nun, da Sie wissen, wo Sie den Upload fortsetzen müssen, mit dem Hochladen der Datei fort. Senden Sie hierzu entweder die verbleibenden Daten oder den nächsten Teil. Fügen Sie einen Content-Range-Header hinzu, der angibt, welcher Teil der Datei gesendet wird. Content-Range: bytes 43-1999999 gibt beispielsweise an, dass Sie die Bytes 44 bis 2.000.000 senden.

Fehler beim Hochladen von Media beheben

Beachten Sie beim Hochladen von Medien die folgenden Best Practices zur Fehlerbehandlung:

  • Bei 5xx-Fehlern sollten Sie Uploads, die aufgrund von Verbindungsunterbrechungen fehlgeschlagen sind, fortsetzen oder wiederholen. Weitere Informationen zur Behandlung von 5xx-Fehlern finden Sie unter 500-, 502-, 503- und 504-Fehler.
  • Bei 403 rate limit-Fehlern versuchen Sie es noch einmal mit dem Upload. Weitere Informationen zur Behandlung von 403 rate limit-Fehlern finden Sie unter 403-Fehler: rateLimitExceeded.
  • Bei 4xx-Fehlern (einschließlich 403) während eines fortsetzbaren Uploads starten Sie den Upload neu. Diese Fehler weisen darauf hin, dass die Upload-Sitzung abgelaufen ist und durch Anfordern eines neuen Sitzungs-URI neu gestartet werden muss. Uploadsitzungen laufen ebenfalls nach einer Woche Inaktivität ab.

In Google Docs importieren

Wenn Sie eine Datei in Drive erstellen, möchten Sie sie möglicherweise in einen Google Workspace-Dateityp wie Google Docs oder Google Sheets konvertieren. Vielleicht möchten Sie ein Dokument aus Ihrer bevorzugten Textverarbeitung in ein Google-Dokument umwandeln, um die Funktionen von Google Docs nutzen zu können.

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

So konvertieren Sie eine CSV-Datei in ein Google Workspace-Tabellenblatt:

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
<?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;
        }
    }
}

Bevor Sie die Datei erstellen, können Sie im importFormats-Array der Ressource about nachsehen, ob eine Konvertierung verfügbar ist. Unterstützte Conversions sind dynamisch in diesem Array verfügbar. Häufig verwendete Importformate:

VonAn
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 eine Google Docs-, Google Sheets- oder Google Präsentationen-Datei hochladen und konvertieren, wird der gesamte Inhalt des Dokuments ersetzt.

Wenn Sie ein Bild in ein Google Docs-Dokument konvertieren, wird die optische Zeichenerkennung (Optical Character Recognition, OCR) verwendet, um das Bild in Text zu konvertieren. Sie können die Qualität des OCR-Algorithmus verbessern, indem Sie den entsprechenden BCP-47-Sprachcode im Parameter ocrLanguage angeben. Der extrahierte Text wird im Dokument neben dem eingebetteten Bild angezeigt.

Dateien mit einer vorab generierten ID hochladen

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

Rufen Sie zum Erstellen vorab generierter IDs files.generateIds mit der Anzahl der zu erstellenden IDs auf.

Sie können Uploads mit vorab generierten IDs bei einem unbestimmten Serverfehler oder Timeout problemlos noch einmal versuchen. Wenn die Datei erfolgreich erstellt wurde, wird bei nachfolgenden Wiederholungsversuchen ein HTTP 409-Fehler zurückgegeben 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 das Feld fullText verwenden, um nach Inhalten aus Ihrer App zu suchen. Weitere Informationen finden Sie unter Dateien und Ordner suchen.

Dokumente werden in Drive automatisch für die Suche indexiert, wenn der Dateityp erkannt wird. Das gilt für Textdokumente, PDFs, Bilder mit Text 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 indexierbaren Text im Feld contentHints.indexableText der Datei angeben.

Weitere Informationen zu indexierbarem Text finden Sie unter Dateimetadaten verwalten.