Prześlij dane pliku

Interfejs Dysku Google API umożliwia przesyłanie danych o pliku podczas tworzenia lub aktualizowania File. Informacje o tworzeniu plików zawierających tylko metadane, np. folderów, znajdziesz w artykule Tworzenie plików zawierających tylko metadane.

Istnieją 3 rodzaje przesyłania:

  • Proste przesyłanie (uploadType=media): użyj tego typu przesyłania, aby przenieść mały plik multimedialny (o wielkości do 5 MB) bez dołączania metadanych. Aby przeprowadzić proste przesyłanie, zapoznaj się z artykułem Przeprowadzanie prostego przesyłania.

  • Przesłanie w wielu częściach (uploadType=multipart): używaj tego typu przesyłania, aby przesłać mały plik (do 5 MB) wraz z metadanymi, które opisują plik, w jednym żądaniu. Aby przeprowadzić przesyłanie wieloczęściowe, zapoznaj się z artykułem Przesyłanie wieloczęściowe.

  • Przesyłanie z możliwością wznowienia (uploadType=resumable): tego typu przesyłanie należy stosować w przypadku dużych plików (większych niż 5 MB) oraz gdy istnieje duże prawdopodobieństwo przerwania połączenia z siecią, na przykład podczas tworzenia pliku z aplikacji mobilnej. Przesyłanie z możliwością wznowienia jest też dobrym wyborem w przypadku większości aplikacji, ponieważ działa również w przypadku małych plików, a koszt to tylko jedno dodatkowe żądanie HTTP na przesyłanie. Aby przeprowadzić przesyłanie z możliwością wznowienia, zapoznaj się z artykułem Przeprowadzanie przesyłania z możliwością wznowienia.

Biblioteki klienta interfejsu API Google implementują co najmniej 1 z tych typów przesyłania. Więcej informacji o sposobach używania poszczególnych typów znajdziesz w dokumentacji biblioteki klienta.

Użyj PATCH lub PUT

Przypominamy, że czasownik HTTP PATCH obsługuje częściową aktualizację zasobu pliku, a czasownik HTTP PUT obsługuje pełną wymianę zasobu. Pamiętaj, że PUTmoże wprowadzić zmiany powodujące przerwanie działania, gdy dodasz nowe pole do istniejącego zasobu.

Podczas przesyłania zasobu pliku postępuj zgodnie z tymi wskazówkami:

  • Użyj czasownika HTTP opisanego w dokumentacji interfejsu API w przypadku początkowego żądania wznawialnego przesyłania lub jedynego żądania prostego lub wieloczęściowego przesyłania.
  • Używaj PUT do wszystkich kolejnych próśb o przesyłanie z możliwością wznowienia, gdy żądanie zostało już rozpoczęte. Te żądania przesyłają treści niezależnie od wywoływanej metody.

Przesyłanie proste

Aby przeprowadzić proste przesyłanie, użyj metody files.create z opcją uploadType=media.

Poniżej znajdziesz instrukcje prostego przesyłania:

HTTP

  1. Utwórz żądanie POST do identyfikatora URI metody /upload z parametrem zapytania uploadType=media:

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

  2. Dodaj dane pliku do treści żądania.

  3. Dodaj te nagłówki HTTP:

    • Content-Type. Ustaw typ nośnika MIME obiektu, który chcesz przesłać.
    • Content-Length. Ustaw na liczbę bajtów, które chcesz przesłać. Jeśli używasz kodowania transferu w porcjach, ten nagłówek nie jest wymagany.
  4. Prześlij prośbę. Jeśli żądanie się powiedzie, serwer zwróci kod stanu HTTP 200 OK wraz z metadanymi pliku. {HTTP}

Podczas prostego przesyłania danych tworzone są podstawowe metadane, a niektóre atrybuty (np. typ MIME lub modifiedTime) są wywnioskowane z pliku. Możesz użyć prostego przesyłania w przypadku małych plików, których metadane nie są ważne.

Przesyłanie wieloczęściowe

Prośba o przesyłanie wieloczęściowe umożliwia przesyłanie metadanych i danych w ramach tej samej prośby. Użyj tej opcji, jeśli wysyłane dane są na tyle małe, że można je ponownie przesłać w całości, jeśli połączenie się nie powiedzie.

Aby przeprowadzić przesyłanie wieloczęściowe, użyj metody files.create z parametrem uploadType=multipart.

Poniżej znajdziesz instrukcje przesyłania wieloczęściowego:

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. Utwórz żądanie POST do identyfikatora URI metody /upload z parametrem zapytania uploadType=multipart:

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

  2. Utwórz treść żądania. Sformatuj treść zgodnie z typem treści multipart/related RFC 2387, który składa się z 2 części:

    • Metadane Metadane muszą być podane jako pierwsze i mieć nagłówek Content-Typeapplication/json;charset=UTF-8. Dodaj metadane pliku w formacie JSON.
    • Multimedia. Media muszą znajdować się w drugiej kolejności i mieć nagłówek Content-Type dowolnego typu MIME. Dodaj dane pliku do części multimedialnej.

    Każdą część należy oznaczyć ciągiem znaków granicznych poprzedzonym przez 2 łączniki. Dodatkowo dodaj 2 łączniki po ostatnim ciągu znaków granicy.

  3. Dodaj te nagłówki HTTP najwyższego poziomu:

    • Content-Type. Ustaw na multipart/related i uwzględnij ciąg znaków używany do identyfikowania różnych części żądania. Przykład: Content-Type: multipart/related; boundary=foo_bar_baz
    • Content-Length. Ustaw na łączną liczbę bajtów w ciele żądania.
  4. Prześlij prośbę.

Aby utworzyć lub zaktualizować tylko część metadanych bez powiązanych danych, wyślij żądanie POST lub PATCH do standardowego punktu końcowego zasobu: https://www.googleapis.com/drive/v3/files Jeśli żądanie się powiedzie, serwer zwróci kod stanu HTTP 200 OK wraz z metadanymi pliku.

Podczas tworzenia plików należy określić rozszerzenie pliku w polu name. Podczas tworzenia pliku JPEG ze zdjęciem możesz na przykład podać w metadanych wartość "name": "photo.jpg". Kolejne wywołania funkcji files.get zwracają właściwość fileExtension tylko do odczytu, która zawiera rozszerzenie określone pierwotnie w polu name.

Przesyłanie z możliwością wznowienia

Przesyłanie z możliwością wznowienia umożliwia wznowienie operacji przesyłania po tym, jak błąd komunikacji przerwie przepływ danych. Ponieważ nie musisz ponownie rozpoczynać przesyłania dużych plików, przesyłanie z możliwością wznowienia może też zmniejszyć wykorzystanie przepustowości, jeśli wystąpi błąd sieci.

Przerywane przesyłanie jest przydatne, gdy rozmiary plików mogą się znacznie różnić lub gdy istnieją stałe limity czasowe dla żądań (np. zadania w tle w systemie operacyjnym na urządzeniach mobilnych i niektóre żądania App Engine). Przesyłanie możliwe do wznowienia możesz też stosować w sytuacjach, gdy chcesz wyświetlić pasek postępu przesyłania.

Przerywane przesyłanie składa się z kilku kroków ogólnych:

  1. Wyślij początkowe żądanie i pobierz identyfikator URI sesji, którą można wznowić.
  2. Przesyłanie danych i monitorowanie stanu przesyłania.
  3. (opcjonalnie) Jeśli przesyłanie zostało przerwane, wznów je.

Wysyłanie początkowego żądania

Aby rozpocząć przesyłanie możliwe do wznowienia, użyj metody files.create z uploadType=resumable.

HTTP

  1. Utwórz żądanie POST do identyfikatora URI metody /upload z parametrem zapytania uploadType=resumable:

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

    Jeśli żądanie zainicjowania się powiedzie, odpowiedź będzie zawierać kod stanu HTTP 200 OK. Dodatkowo zawiera nagłówek Location, który określa identyfikator URI sesji z możliwością wznowienia:

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

    Zapisz identyfikator URI sesji, którą można wznowić, aby móc przesłać dane pliku i wysłać zapytanie o stan przesyłania. Identyfikator URI sesji, którą można wznowić, wygasa po tygodniu.

  2. Jeśli masz metadane pliku, dodaj je do treści żądania w formacie JSON. W przeciwnym razie pozostaw treść żądania pustą.

  3. Dodaj te nagłówki HTTP:

    • X-Upload-Content-Type Opcjonalna. Ustaw na typ MIME danych pliku, które są przesyłane w kolejnych żądaniach. Jeśli typ MIME danych nie jest określony w metadanych ani w tym nagłówku, obiekt jest wyświetlany jako application/octet-stream.
    • X-Upload-Content-Length Opcjonalna. Ustaw na liczbę bajtów danych pliku, które są przesyłane w kolejnych żądaniach.
    • Content-Type. Wymagane, jeśli masz metadane pliku. Ustaw na application/json; charset=UTF-8.
    • Content-Length. Wymagane, chyba że używasz kodowania z dzieleniem na części. Ustaw na liczbę bajtów w treści tego początkowego żądania.
  4. Prześlij prośbę. Jeśli żądanie rozpoczęcia sesji zakończy się powodzeniem, odpowiedź będzie zawierać kod stanu 200 OK HTTP. Dodatkowo odpowiedź zawiera nagłówek Location, który określa identyfikator URI sesji z możliwością wznowienia. Użyj identyfikatora URI sesji z możliwością wznowienia, aby przesłać dane pliku i sprawdzić stan przesyłania. Identyfikator URI sesji, którą można wznowić, wygasa po tygodniu.

  5. Skopiuj i zapisz adres URL sesji, którą można wznowić.

  6. Przejdź do przesyłania treści.

Przesyłanie treści

Plik można przesłać w ramach sesji możliwej do wznowienia na 2 sposoby:

  • Przesyłanie treści w ramach jednego żądania: użyj tego podejścia, gdy plik może zostać przesłany w ramach jednego żądania, jeśli nie ma ustalonego limitu czasu dla żadnego żądania lub nie musisz wyświetlać wskaźnika postępu przesyłania. To podejście jest najlepsze, ponieważ wymaga wysłania mniejszej liczby żądań i daje lepsze wyniki.
  • Przesyłanie treści w wielu częściach: użyj tego podejścia, jeśli musisz zmniejszyć ilość danych przesyłanych w jednym żądaniu. Jeśli w przypadku poszczególnych żądań obowiązuje określony limit czasowy, konieczne może być ograniczenie przesyłanych danych. Może się tak zdarzyć w przypadku niektórych klas żądań App Engine. Takie podejście jest też przydatne, jeśli musisz wyświetlić niestandardowy wskaźnik postępu przesyłania.

HTTP – pojedyncze żądanie

  1. Utwórz żądanie PUT do identyfikatora URI sesji z możliwością wznowienia.
  2. Dodaj dane pliku do treści żądania.
  3. Dodaj nagłówek HTTP Content-Length, ustawiony na liczbę bajtów w pliku.
  4. Prześlij prośbę. Jeśli żądanie przesyłania zostanie przerwane lub otrzymasz odpowiedź 5xx, postępuj zgodnie z instrukcjami w artykule Wznawianie przerwanego przesyłania.

HTTP – wiele żądań

  1. Utwórz żądanie PUT do identyfikatora URI sesji z możliwością wznowienia.

  2. Dodaj dane fragmentu do treści żądania. Tworzenie fragmentów o wielokrotności 256 KB (256 x 1024 bajtów), z wyjątkiem ostatniego fragmentu, który kończy przesyłanie. Ustaw rozmiar fragmentu na jak największy, aby przesyłanie było wydajne.

  3. Dodaj te nagłówki HTTP:

    • Content-Length. Ustaw na liczbę bajtów w bieżącym fragmencie.
    • Content-Range. Ustaw, które bajty w przesyłanym pliku mają być widoczne. Na przykład Content-Range: bytes 0-524287/2000000 oznacza, że przesyłasz pierwsze 524 288 bajtów (256 x 1024 x 2) z pliku o rozmiarze 2 000 000 bajtów.
  4. Prześlij żądanie i przetwórz odpowiedź. Jeśli żądanie przesyłania zostało przerwane lub jeśli otrzymasz odpowiedź 5xx, postępuj zgodnie z instrukcjami w artykule Wznawianie przerwanego przesyłania.

  5. Powtórz kroki 1–4 w przypadku każdego fragmentu, który pozostał w pliku. Aby określić, gdzie ma się zacząć następny fragment, użyj nagłówka Range w odpowiedzi. Nie zakładaj, że serwer otrzymał wszystkie bajty wysłane w poprzednim żądaniu.

Po zakończeniu przesyłania pliku otrzymasz odpowiedź 200 OK lub 201 Created wraz z metadanymi powiązanymi z tym zasobem.

Wznawianie przerwanego przesyłania

Jeśli żądanie przesyłania zostało przerwane przed otrzymaniem odpowiedzi lub jeśli otrzymasz odpowiedź 503 Service Unavailable, musisz wznowić przerwane przesyłanie.

HTTP

  1. Aby uzyskać stan przesyłania, utwórz puste żądanie PUT do identyfikatora URI sesji z możliwością wznowienia.

  2. Dodaj nagłówek Content-Range, aby wskazać, że bieżąca pozycja w pliku jest nieznana. Jeśli na przykład łączna długość pliku wynosi 2 000 000 bajtów, ustaw wartość parametru Content-Range na */2000000. Jeśli nie znasz pełnego rozmiaru pliku, ustaw Content-Range na */*.

  3. Prześlij prośbę.

  4. Przetwarzanie odpowiedzi:

    • Odpowiedź 200 OK lub 201 Created oznacza, że przesyłanie zostało zakończone i nie trzeba podejmować żadnych dalszych działań.
    • Odpowiedź 308 Resume Incomplete oznacza, że musisz kontynuować przesyłanie pliku.
    • Odpowiedź 404 Not Found wskazuje, że sesja przesyłania wygasła i przesyłanie musi zostać rozpoczęte od początku.
  5. Jeśli otrzymasz odpowiedź 308 Resume Incomplete, przetwórz nagłówek Range odpowiedzi, aby określić, które bajty zostały odebrane przez serwer. Jeśli odpowiedź nie zawiera nagłówka Range, nie otrzymano żadnych bajtów. Na przykład nagłówek Range o wartości bytes=0-42 wskazuje, że otrzymano pierwsze 43 bajty pliku, a następny fragment do przesłania rozpocznie się od bajtu 44.

  6. Teraz, gdy wiesz, od którego miejsca wznowić przesyłanie, kontynuuj przesyłanie pliku, zaczynając od następnego bajta. Dołącz nagłówek Content-Range, aby wskazać, która część pliku jest wysyłana. Na przykład Content-Range: bytes 43-1999999 oznacza, że wysyłasz bajty od 44 do 2 000 000.

Obsługa błędów przesyłania multimediów

Podczas przesyłania multimediów stosuj te sprawdzone metody radzenia sobie z błędami:

  • W przypadku błędów 5xx wznów lub ponów próbę przesyłania, które nie powiodło się z powodu przerwania połączenia. Więcej informacji o postępowaniu z błędami 5xx znajdziesz w artykule Błędy 500, 502, 503 i 504.
  • W przypadku błędów 403 rate limit spróbuj przesłać plik ponownie. Więcej informacji o rozwiązywaniu błędów 403 rate limit znajdziesz w artykule Błąd 403: rateLimitExceeded.
  • W przypadku błędów 4xx (w tym 403) podczas przesyłania z możliwością wznowienia należy je ponownie rozpocząć. Te błędy wskazują, że sesja przesyłania wygasła i musi zostać ponownie uruchomiona przez wysłanie żądania nowego identyfikatora URI sesji. Sesje przesyłania również wygasają po tygodniu nieaktywności.

Importowanie do typów Dokumentów Google

Podczas tworzenia pliku na Dysku możesz chcieć przekonwertować go na plik typu Google Workspace, takiego jak Dokumenty lub Arkusze. Możesz na przykład przekształcić dokument z ulubionego procesora tekstu w dokument Dokumentów, aby skorzystać z jego funkcji.

Aby przekonwertować plik na określony typ pliku Google Workspace, podczas tworzenia pliku określ opcję Google Workspace mimeType.

Poniżej znajdziesz instrukcje konwertowania pliku CSV na arkusz Google Workspace:

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

Aby sprawdzić, czy konwersja jest dostępna, przed utworzeniem pliku sprawdź tablicę importFormats zasobu about. Obsługiwane konwersje są dynamicznie dostępne w tym tablicy. Oto kilka typowych formatów importu:

ZDo
Microsoft Word, OpenDocument Text, HTML, RTF, zwykły tekstDokumenty Google
Microsoft Excel, OpenDocument Spreadsheet, CSV, TSV, zwykły tekstArkusze Google
Microsoft PowerPoint, prezentacja OpenDocumentPrezentacje Google
JPEG, PNG, GIF, BMP, PDFDokumenty Google (obraz jest umieszczany w dokumencie)
Tekst (specjalny typ MIME), JSONGoogle Apps Script

Gdy przesyłasz i konwertujesz multimedia podczas update do pliku Dokumentów, Arkuszy lub Prezentacji, cała zawartość dokumentu zostanie zastąpiona.

Gdy konwertujesz obraz na dokument w Dokumentach, Dysk używa optycznego rozpoznawania znaków (OCR), aby przekształcić obraz w tekst. Możesz poprawić jakość algorytmu OCR, podając odpowiedni kod języka BCP 47 w parametrze ocrLanguage. Wyodrębniony tekst pojawi się w dokumencie obok umieszczonego obrazu.

Przesyłanie plików za pomocą wygenerowanego wcześniej identyfikatora

Interfejs Drive API umożliwia pobieranie listy wcześniej wygenerowanych identyfikatorów plików, które służą do przesyłania i tworzenia zasobów. Prośby o przesyłanie i tworzenie plików mogą używać tych wstępnie wygenerowanych identyfikatorów. W metadanych pliku ustaw pole id.

Aby utworzyć wygenerowane wcześniej identyfikatory, wywołaj funkcję files.generateIds z liczbą identyfikatorów do utworzenia.

Jeśli wystąpi nieokreślony błąd serwera lub przekroczenie limitu czasu, możesz bezpiecznie powtórzyć przesyłanie za pomocą wygenerowanych wcześniej identyfikatorów. Jeśli plik został utworzony, kolejne próby zwracają błąd HTTP 409 i nie tworzą duplikatów.

Definiowanie tekstu możliwego do zindeksowania w przypadku nieznanych typów plików

Użytkownicy mogą znaleźć zawartość dokumentu za pomocą interfejsu Dysku. Możesz też użyć pola files.listfullText, aby wyszukać treści z aplikacji. Więcej informacji znajdziesz w artykule Wyszukiwanie plików i folderów.

Dysk automatycznie indeksuje dokumenty na potrzeby wyszukiwania, gdy rozpoznaje typ pliku, w tym dokumenty tekstowe, pliki PDF, obrazy z tekstem i inne popularne typy. Jeśli Twoja aplikacja zapisuje inne typy plików (np. rysunki, filmy i skróty), możesz zwiększyć ich widoczność, podając tekst do zindeksowania w polu contentHints.indexableText pliku.

Więcej informacji o tekstach możliwych do zindeksowania znajdziesz w artykule Zarządzanie metadanymi plików.