Dateidaten hochladen

Mit der Google Drive API können Sie beim Erstellen oder Aktualisieren einer File Dateidaten hochladen. Informationen zum Erstellen einer Nur-Metadaten-Datei, z. B. eines Ordners, finden Sie unter Dateien erstellen, die nur Metadaten enthalten.

Es gibt drei Arten von Uploads:

  • Einfacher Upload (uploadType=media): Verwenden Sie diesen Uploadtyp, um eine kleine Mediendatei (maximal 5 MB) ohne Metadaten zu übertragen. Informationen für einen einfachen Upload finden Sie unter Einfachen Upload durchführen.

  • Mehrteiliger Upload (uploadType=multipart): Mit diesem Uploadtyp können Sie eine kleine Datei (maximal 5 MB) zusammen mit Metadaten, die die Datei beschreiben, in einer einzelnen Anfrage übertragen. Informationen zum Ausführen eines mehrteiligen Uploads finden Sie unter Mehrteiligen Upload durchführen.

  • Fortsetzbarer Upload (uploadType=resumable): Verwenden Sie diesen Uploadtyp für große Dateien (größer als 5 MB) und wenn die Wahrscheinlichkeit einer Netzwerkunterbrechung sehr hoch ist, z. B. beim Erstellen einer Datei von einer mobilen App. Fortsetzbare Uploads sind auch eine gute Wahl für die meisten Anwendungen, da sie auch für kleine Dateien funktionieren – und das bei minimalen Kosten einer zusätzlichen HTTP-Anfrage pro Upload. Informationen zum Ausführen eines fortsetzbaren Uploads finden Sie unter Fortsetzbare Uploads durchführen.

In den Google API-Clientbibliotheken wird mindestens einer dieser Uploadtypen implementiert. Weitere Informationen zur Verwendung der einzelnen Typen finden Sie in der Dokumentation zur Clientbibliothek.

PATCH oder PUT verwenden

Zur Erinnerung: Das HTTP-Verb PATCH unterstützt eine teilweise Aktualisierung der Dateiressourcen, während das HTTP-Verb PUT die vollständige Ressourcenersetzung unterstützt. Beachten Sie, dass PUT zu funktionsgefährdenden Änderungen führen kann, wenn einer vorhandenen Ressource ein neues Feld hinzugefügt wird.

Beachten Sie beim Hochladen einer Dateiressource 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 unabhängig von der aufgerufenen Methode hochgeladen.

Einfachen Upload durchführen

Für einen einfachen Upload verwenden Sie die Methode files.create mit uploadType=media.

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

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 diese HTTP-Header hinzu:

    • Content-Type. Legen Sie als Wert den MIME-Medientyp des hochgeladenen Objekts fest.
    • Content-Length. Legen Sie als Wert die Anzahl von Bytes fest, die Sie hochladen. Wenn Sie die aufgeteilte Transferverschlüsselung verwenden, 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 ausführen, werden grundlegende Metadaten erstellt und einige Attribute wie der MIME-Typ oder modifiedTime werden aus der Datei abgeleitet. Wenn Sie kleine Dateien haben und Dateimetadaten nicht wichtig sind, können Sie einen einfachen Upload verwenden.

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 noch einmal vollständig hochzuladen, wenn die Verbindung fehlschlägt.

Verwenden Sie für einen mehrteiligen Upload die 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 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 Anfragetext. Formatieren Sie den Text gemäß dem aus zwei Teilen bestehenden mehrteiligen Inhaltstyp RFC 2387:

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

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

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

    • Content-Type. Legen Sie dafür multipart/related fest und fügen Sie den Grenzstring hinzu, mit dem Sie die verschiedenen Teile der Anfrage identifizieren. 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 und 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 den Metadaten der Datei zurück.

Beim Erstellen von Dateien sollte er eine Dateiendung im Feld name der Datei angeben. Wenn Sie beispielsweise eine JPEG-Fotodatei erstellen, können Sie in den Metadaten "name": "photo.jpg" angeben. Bei nachfolgenden Aufrufen von files.get wird das schreibgeschützte Attribut fileExtension zurückgegeben, das die Erweiterung enthält, die ursprünglich im Feld name angegeben wurde.

Fortsetzbaren Upload durchfü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 Anfang an neu starten müssen, können fortsetzbare Uploads auch die Bandbreitennutzung bei einem Netzwerkfehler reduzieren.

Fortsetzbare Uploads sind nützlich, wenn Ihre Dateigrößen stark variieren können oder wenn es ein festes Zeitlimit für Anfragen gibt (z. B. Hintergrundaufgaben des mobilen Betriebssystems und bestimmte App Engine-Anfragen). Fortsetzbare Uploads eignen sich auch für Situationen, in denen eine Fortschrittsanzeige eingeblendet 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 gestört wird, können Sie ihn fortsetzen.

Erste Anfrage senden

Verwenden Sie die Methode files.create mit uploadType=resumable, um einen fortsetzbaren Upload zu initiieren.

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 Initiierungsanfrage 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 Metadaten für die Datei vorhanden sind, fügen Sie diese dem Anfragetext im JSON-Format hinzu. 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, wird das Objekt als application/octet-stream. bereitgestellt.
    • X-Upload-Content-Length. Optional. Legen Sie als Wert die Anzahl von Byte für Dateidaten fest, die in nachfolgenden Anfragen übertragen werden.
    • Content-Type. Dies ist erforderlich, wenn Sie Metadaten für die Datei haben. Legen Sie dafür 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 im Text dieser ersten Anfrage fest.
  4. Senden Sie die Anfrage. Wenn die Anfrage zum Starten der Sitzung erfolgreich war, enthält die Antwort den Statuscode 200 OK HTTP. Darüber hinaus 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 und speichern Sie die URL der fortsetzbaren Sitzung.

  6. Fahren Sie mit Inhalte hochladen fort.

Inhalt hochladen

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

  • Inhalte in einer einzelnen Anfrage hochladen: Verwenden Sie diese Methode, wenn die Datei in einer einzigen Anfrage hochgeladen werden kann, es kein festes Zeitlimit für eine einzelne Anfrage gibt oder keine Fortschrittsanzeige für den Upload erforderlich ist. Diese Methode ist am besten geeignet, da sie weniger Anfragen erfordert und zu einer besseren Leistung führt.
  • Inhalte in mehreren Blöcken hochladen: Verwenden Sie diesen Ansatz, wenn Sie die bei einer einzelnen Anfrage übertragene Datenmenge reduzieren müssen. Wenn für einzelne Anfragen ein festes Zeitlimit gilt, z. B. bei bestimmten Klassen von App Engine-Anfragen, müssen Sie möglicherweise die übertragenen Daten reduzieren. Dieser Ansatz ist auch nützlich, wenn Sie einen benutzerdefinierten Indikator zur Anzeige des Uploadfortschritts 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 „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 eine 5xx-Antwort zurückgegeben wird, 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 in Vielfachen von 256 KB (256 × 1024 Byte). Hiervon ausgenommen ist der letzte Block, der den Upload abgeschlossen hat. Halten Sie die Chunk-Größe so groß wie möglich, damit der Upload effizient ist.

  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 Sie hochladen. Beispiel: Content-Range: bytes 0-524287/2000000 gibt an, dass Sie die ersten 524.288 Byte (256 × 1024 × 2) in einer Datei mit 2.000.000 Byte hochladen.
  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 Teil der Datei. Verwenden Sie den Header Range in der Antwort, um zu bestimmen, wo der nächste Teil beginnt. Gehen Sie nicht davon aus, dass der Server alle Byte erhalten hat, die in der vorherigen Anfrage gesendet wurden.

Wenn der gesamte Dateiupload abgeschlossen ist, erhalten Sie die Antwort 200 OK oder 201 Created zusammen mit allen Metadaten, die der Ressource zugeordnet 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 in der Datei unbekannt ist. Legen Sie beispielsweise Content-Range auf */2000000 fest, wenn die Gesamtdateilänge 2.000.000 Byte beträgt. Wenn Sie die vollständige Größe der Datei nicht kennen, legen Sie Content-Range auf */* 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 die Datei weiter hochladen müssen.
    • Eine 404 Not Found-Antwort gibt an, dass die Uploadsitzung abgelaufen ist und der Upload von vorn neu gestartet werden muss.
  5. Wenn Sie eine 308 Resume Incomplete-Antwort erhalten haben, verarbeiten Sie den Range-Header der Antwort, um festzustellen, welche Byte der Server empfangen hat. Wenn die Antwort keinen Range-Header enthält, wurden keine Bytes empfangen. Der Header Range mit dem Wert bytes=0-42 gibt beispielsweise an, dass die ersten 43 Byte der Datei empfangen wurden und der nächste Block zum Hochladen mit Byte 44 beginnen würde.

  6. Sie wissen nun, wo Sie den Upload fortsetzen sollen. Fahren Sie nun mit dem Hochladen der Datei ab dem nächsten Byte fort. Fügen Sie einen Content-Range-Header ein, um anzugeben, welchen Teil der Datei Sie senden. Content-Range: bytes 43-1999999 gibt beispielsweise an, dass Sie die Byte 44 bis 2.000.000 senden.

Fehler beim Hochladen von Medien beheben

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

  • Setzen Sie bei 5xx-Fehlern Uploads fort, die aufgrund von Verbindungsunterbrechungen fehlgeschlagen sind, oder wiederholen Sie sie. Weitere Informationen zum Umgang mit 5xx-Fehlern finden Sie unter Fehler 500, 502, 503 und 504.
  • Wiederholen Sie bei 403 rate limit Fehlern den Upload. Weitere Informationen zum Beheben von Fehlern des Typs 403 rate limit finden Sie unter Fehler 403: rateLimitExceeded.
  • Wenn während eines fortsetzbaren Uploads 4xx-Fehler (einschließlich 403) auftreten, starten Sie den Upload neu. Diese Fehler weisen darauf hin, dass die Uploadsitzung abgelaufen ist und durch Anfrage eines neuen Sitzungs-URI neu gestartet werden muss. Uploadsitzungen laufen auch nach einer Woche Inaktivität ab.

In Google Docs-Typen importieren

Wenn Sie eine Datei in Drive erstellen, möchten Sie sie möglicherweise in einen Google Workspace-Dateityp konvertieren, z. B. Google Docs oder Google Tabellen. Vielleicht möchten Sie z. B. ein Dokument aus Ihrem bevorzugten Textverarbeitungsprogramm in ein Dokument umwandeln, um die damit verbundenen Funktionen nutzen zu können.

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

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({
      resource: 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;
        }
    }
}

Prüfen Sie vor dem Erstellen der Datei das importFormats-Array der about-Ressource, um festzustellen, ob eine Konvertierung verfügbar ist. Unterstützte Konvertierungen sind in diesem Array dynamisch verfügbar. Gängige Importformate sind:

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

Wenn Sie während einer update-Anfrage Medien hochladen und in eine Datei in Google Docs, Google Tabellen oder Google Präsentationen konvertieren, wird der gesamte Inhalt des Dokuments ersetzt.

Wenn Sie ein Bild in ein Google-Dokument konvertieren, wird das Bild mithilfe der optischen Zeichenerkennung (OCR) in Text umgewandelt. Sie können die Qualität des OCR-Algorithmus verbessern, indem Sie den entsprechenden BCP47-Sprachcode im Parameter ocrLanguage angeben. 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 vorab generierter Datei-IDs abrufen, die zum Hochladen und Erstellen von Ressourcen verwendet werden. Bei Anfragen zum Hochladen und zur Dateierstellung können diese vorab generierten IDs verwendet werden. Legen Sie das Feld id in den Dateimetadaten fest.

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

Sie können Uploads mit vorab generierten IDs bedenkenlos wiederholen, wenn ein nicht definierter Serverfehler oder eine Zeitüberschreitung auftritt. Wenn die Datei erfolgreich erstellt wurde, wird bei nachfolgenden Wiederholungen der Fehler HTTP 409 zurückgegeben und es werden keine doppelten Dateien erstellt.

Indexierbaren Text für unbekannte Dateitypen definieren

Nutzer können die Drive-Benutzeroberfläche verwenden, um nach Dokumentinhalten zu suchen. Sie können auch files.list und das Feld fullText verwenden, um nach Inhalten aus Ihrer Anwendung zu suchen. Weitere Informationen finden Sie unter Nach Dateien und Ordnern suchen.

Drive indexiert Dokumente automatisch für die Suche, wenn der Dateityp erkannt wird. Dazu gehören Textdokumente, PDFs, Bilder mit Text und andere gängige Typen. Falls Ihre Anwendung andere Dateitypen speichert, z. B. Zeichnungen, Videos und Verknüpfungen, können Sie die Auffindbarkeit verbessern, indem Sie in das Feld contentHints.indexableText der Datei indexierten Text eingeben.

Weitere Informationen zu indexierbaren Texten finden Sie unter Dateimetadaten verwalten.