Prześlij dane pliku

Interfejs Dysku Google API umożliwia przesyłanie danych o pliku podczas tworzenia lub aktualizowania File. Informacje o tworzeniu pliku zawierającego tylko metadane (np. folderu) znajdziesz w artykule Tworzenie plików z samymi metadanymi.

Istnieją 3 rodzaje przesyłania:

  • Proste przesyłanie (uploadType=media): ten typ przesyłania służy do przesyłania niewielkiego pliku multimedialnego o wielkości do 5 MB bez podawania 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. Informacje o przesyłaniu wieloczęściowym znajdziesz w sekcji Przesyłanie wieloczęściowe.

  • Przesyłanie z możliwością wznowienia (uploadType=resumable): używaj tego typu przesyłania 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 przy minimalnym koszcie przesyłania, który stanowi 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 obsługują 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 przestrzegaj tych wytycznych:

  • 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 we wszystkich kolejnych żądaniach przesyłania z możliwością wznowienia, gdy żądanie zostało już rozpoczęte. Żądania te przesyłają treści niezależnie od wywoływanej metody.

Przesyłanie proste

Aby wykonać proste przesyłanie, użyj metody files.create z 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 multimediów MIME dla przesyłanego obiektu.
    • 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. Wyś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 tworzone są podstawowe metadane, a niektóre atrybuty, takie jak typ MIME czy modifiedTime, są wnioskowane 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 przesyłane dane są na tyle małe, że w razie niepowodzenia połączenia można ponownie przesłać je w całości.

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. Plik multimedialny musi być w drugiej kolejności i musi 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. Poza tym za ostatnim ciągiem znaków granicy dodaj 2 łączniki.

  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, w przypadku awarii sieci przesyłanie z możliwością wznowienia może też zmniejszyć wykorzystanie przepustowości.

Przesyłanie z możliwością wznowienia jest przydatne, gdy rozmiary plików mogą się znacznie różnić lub gdy istnieje ustalony limit czasowy dla żądań (np. zadania wykonywane w tle systemu operacyjnego na urządzeniu mobilnym i określone żą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.

Wyślij wstępne żądanie

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 możliwej do wznowienia, aby móc przesłać dane pliku i zapytać 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 Opcjonalnie. 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 liczbę bajtów danych pliku, które są przesyłane w kolejnych żądaniach.
    • Content-Type. Wymagany, jeśli masz metadane pliku. Ustaw na application/json; charset=UTF-8.
    • Content-Length. Wymagany, chyba że używasz kodowania fragmentowego transferu. Ustaw na liczbę bajtów w treści tego początkowego żądania.
  4. Wyś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. Za pomocą identyfikatora URI sesji z możliwością wznawiania możesz przesyłać dane pliku i sprawdzać 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

Są 2 sposoby przesyłania pliku z sesją, którą można wznowić:

  • Przesyłanie treści w ramach pojedynczego żądania: użyj tego podejścia, gdy plik może zostać przesłany w ramach jednego żądania, jeśli nie ma określonego limitu czasu dla pojedynczego żą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 kilku częściach: użyj tego podejścia, jeśli musisz zmniejszyć ilość danych przesyłanych w pojedynczym żą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, aby pokazywać, jakie bajty w przesyłanym pliku. 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 całego pliku otrzymasz odpowiedź 200 OK lub 201 Created wraz ze wszystkimi metadanymi powiązanymi z zasobem.

Wznawianie przerwanego przesyłania

Jeśli żądanie przesyłania zostanie zakończone przed odpowiedzią lub 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 są wymagane żadne dodatkowe działania.
    • Odpowiedź 308 Resume Incomplete wskazuje, że musisz kontynuować przesyłanie pliku.
    • Odpowiedź 404 Not Found wskazuje, że sesja przesyłania wygasła i trzeba rozpocząć przesyłanie 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 ma 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 już wiesz, gdzie wznowić przesyłanie, możesz kontynuować przesyłanie pliku, zaczynając od następnego bajtu. 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 o numerach 44–2 000 000.

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

Podczas przesyłania multimediów postępuj zgodnie z tymi sprawdzonymi metodami:

  • 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 obsłudze błędów 5xx znajdziesz w artykule o błędach 500, 502, 503 i 504.
  • W przypadku błędów 403 rate limit spróbuj przesłać plik ponownie. Więcej informacji o obsłudze błędów 403 rate limit znajdziesz w artykule Błąd 403: rateLimitExceeded.
  • Jeśli podczas wznawiania przesyłania wystąpią błędy 4xx (w tym 403), rozpocznij przesyłanie od nowa. Te błędy oznaczają, że sesja przesyłania wygasła i trzeba ją rozpocząć ponownie, wysyłając żądanie o nowy identyfikator URI sesji. Sesje przesyłania wygasają też po tygodniu braku aktywności.

Typy plików do importowania do 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 w Dokumentach, aby skorzystać z jego funkcji.

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

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. Typowe formaty importu to:

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 (umieszcza obraz w dokumencie)
Zwykły 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 format Dokumentów, Dysk konwertuje obraz na tekst za pomocą optycznego rozpoznawania znaków (OCR). 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. Żądania przesyłania i tworzenia plików mogą korzystać z tych wstępnie wygenerowanych identyfikatorów. Ustaw pole id w metadanych pliku.

Aby utworzyć wstępnie wygenerowane identyfikatory, wywołaj metodę 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ą wcześniej wygenerowanych 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. Do wyszukiwania treści z aplikacji możesz też użyć files.list i pola fullText. Więcej informacji znajdziesz w artykule Wyszukiwanie plików i folderów.

Dysk automatycznie indeksuje dokumenty na potrzeby wyszukiwania, gdy rozpozna typ plików, w tym dokumenty tekstowe, pliki PDF, obrazy z tekstem i inne popularne typy plików. 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 tekście możliwym do indeksowania znajdziesz w artykule Zarządzanie metadanymi plików.