Prześlij dane pliku

Interfejs Google Drive API umożliwia przesyłanie danych podczas tworzenia lub aktualizowania File Aby dowiedzieć się, jak utworzyć pliku z samymi metadanymi, np. folderu, zapoznaj się z sekcją Tworzenie plików tylko z metadanymi.

Istnieją 3 rodzaje filmów, które możesz przesyłać:

  • Proste przesyłanie (uploadType=media): użyj tego typu przesyłania, aby przenieść plik małymi plikami multimedialnymi o rozmiarze maks. 5 MB – bez metadanych. Aby wykonać przeczytaj artykuł Przesyłanie prostego pliku.

  • Przesyłanie wieloczęściowe (uploadType=multipart): „Użyj tego typu przesyłania, aby: prześlij mały plik (o maks. 5 MB) wraz z metadanymi opisującymi w jednym żądaniu. Informacje o przesyłaniu wieloczęściowym znajdziesz w sekcji Wykonywanie lub przesyłanie wieloczęściowe.

  • Przesyłanie z możliwością wznowienia (uploadType=resumable): użyj tego typu przesyłania w przypadku dużych plików (większych niż 5 MB) i w przypadku wysokiego prawdopodobieństwa połączenia z siecią. np. podczas tworzenia pliku w aplikacji mobilnej. Można wznowić przesyłanie danych to także dobry wybór w przypadku większości aplikacji, ponieważ w przypadku małych plików przy minimalnym koszcie wynoszącym jedno dodatkowe żądanie HTTP na przesłanie. Informacje o przesyłaniu, które można wznowić, znajdziesz w sekcji Przesyłanie pliku z możliwością wznowienia prześlij.

Biblioteki klienta interfejsów API Google implementują co najmniej jeden z tych typów przesłanych plików. Skorzystaj z biblioteki klienta dokumentacji, gdzie znajdziesz dodatkowe informacje. korzystanie z każdego z nich.

Użyj kolumn PATCH w porównaniu z: PUT

Dla przypomnienia: czasownik HTTP PATCH obsługuje częściową aktualizację zasobów pliku a czasownik HTTP PUT obsługuje pełną zastępowanie zasobów. Pamiętaj, że PUT może wprowadzić zmiany powodujące niezgodność przy dodawaniu nowego pola do istniejącego zasobu.

Podczas przesyłania zasobu pliku stosuj się do tych wskazówek:

  • W pierwszym żądaniu użyj czasownika HTTP udokumentowanego w dokumentacji interfejsu API przesyłania z możliwością wznowienia lub w przypadku jedynej prośby o przesyłanie proste lub wieloczęściowe.
  • Użyj PUT w przypadku wszystkich kolejnych próśb o wznawianie przesyłania, rozpoczęto wysyłanie żądania. Żądania te dotyczą przesyłania treści niezależnie .

Prześlij proste pliki

Aby to zrobić, użyj files.create z uploadType=media

Oto jak to zrobić:

HTTP

  1. Utwórz żądanie POST do identyfikatora URI metody /upload za pomocą zapytania parametr 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 obiektu przesłano.
    • Content-Length Ustaw liczbę przesyłanych bajtów. Jeśli używasz fragmentacji transferu, ten nagłówek nie jest wymagany.
  4. Wyślij prośbę. Jeśli żądanie zostanie zrealizowane, serwer zwróci kod stanu HTTP 200 OK wraz z metadanymi pliku. {HTTP}

.

Gdy przesyłasz proste pliki, tworzone są podstawowe metadane i niektóre atrybuty. są wyodrębniane z pliku, np. typ MIME lub modifiedTime. Za pomocą łatwe przesyłanie w przypadku małych plików i metadanych są ważne.

Przesyłanie wieloczęściowe

Wieloczęściowe żądanie przesyłania umożliwia przesyłanie metadanych i danych w tym samym użytkownika. Wybierz tę opcję, jeśli przesyłane dane są na tyle małe, że można je przesłać ponownie. w całości, w przypadku problemów z połączeniem.

Aby przeprowadzić przesyłanie wieloczęściowe, użyj files.create z 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 za pomocą zapytania parametr uploadType=multipart:

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

  2. Utwórz treść żądania. Sformatuj treść zgodnie z typ treści multipart/related content type RFC 2387, składający się z 2 części:

    • Metadane Metadane muszą być pierwsze i mieć Content-Type nagłówek został ustawiony na application/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.

    Wskaż każdą część ciągiem znaków granicy poprzedzonym dwoma łącznikami. W dodaj dwa łączniki za ostatnim ciągiem znaków granicy.

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

    • Content-Type Ustaw jako multipart/related i uwzględnij granicę którego używasz do identyfikowania różnych części żądania. Dla: przykład: Content-Type: multipart/related; boundary=foo_bar_baz
    • Content-Length Ustaw łączną liczbę bajtów w treści żądania.
  4. Wyś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 zostanie zrealizowane, serwer zwraca kod stanu HTTP 200 OK wraz z metadanych.

Podczas tworzenia plików powinny one określić rozszerzenie pliku w następujący sposób: name . Na przykład podczas tworzenia pliku JPEG zdjęcia można określić np. "name": "photo.jpg". Kolejne wywołania files.get zwracają właściwość fileExtension tylko do odczytu zawierający rozszerzenie określone pierwotnie w polu name.

Wykonaj przesyłanie, które można wznowić

Przesyłanie z możliwością wznowienia umożliwia wznowienie operacji przesyłania po nawiązaniu komunikacji. zakłóca przepływ danych. Ponieważ nie trzeba ponownie uruchamiać dużych plików przesyłanie plików od początku, możliwość wznowienia przesyłania również może zmniejszyć przepustowość wykorzystanie zasobów w przypadku awarii sieci.

Przesyłanie z możliwością wznowienia przydaje się, gdy rozmiary plików mogą się znacznie różnić lub ma stały limit czasowy dla żądań (takich jak zadania wykonywane w tle systemu operacyjnego mobilnego określonych żądań App Engine). Możesz też użyć funkcji wznawiania przesyłania w przypadku chcesz wyświetlić pasek postępu przesyłania.

Przesyłanie z możliwością wznowienia składa się z kilku głównych etapów:

  1. Wyślij pierwsze żądanie i pobierz identyfikator URI sesji możliwej do wznowienia.
  2. Przesyłanie danych i monitorowanie stanu przesyłania.
  3. (Opcjonalnie) Jeśli przesyłanie zostanie zakłócone, wznów je.

Wyślij wstępne żądanie

Aby rozpocząć przesyłanie, które można wznowić, użyj files.create z uploadType=resumable

HTTP

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

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

    Jeśli żądanie inicjowania zakończy się powodzeniem, odpowiedź będzie zawierać dyrektywę 200 OK kodu stanu HTTP. Dodatkowo zawiera nagłówek Location, który określa identyfikator URI sesji możliwej do 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 z możliwością wznawiania, aby móc przesłać dane pliku i wykonać zapytanie stan przesyłania. Identyfikator URI sesji z możliwością wznowienia wygasa po tygodniu.

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

  3. Dodaj te nagłówki HTTP:

    • X-Upload-Content-Type Opcjonalna. Ustaw typ MIME pliku które są przesyłane w kolejnych żądaniach. Jeśli danych nie zostały określone w metadanych ani za pomocą tego nagłówka, obiekt jest obsługiwany jako application/octet-stream.
    • X-Upload-Content-Length Opcjonalna. Ustaw liczbę bajtów i przekazywane 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 liczbę bajtów w treści tego początkowego żądania.
  4. Wyślij prośbę. Jeśli żądanie zainicjowania sesji zostanie zrealizowane, odpowiedź zawiera kod stanu 200 OK HTTP. Ponadto odpowiedź zawiera nagłówek Location, który określa identyfikator URI sesji możliwej do wznowienia. Identyfikator URI sesji z możliwością wznawiania służy do przesyłania danych plików i wysyłania zapytań do stanu przesyłania. Identyfikator URI sesji z możliwością wznowienia wygasa po tygodniu.

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

  6. Przejdź do sekcji Prześlij treści.

Prześlij treści

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

  • Przesyłanie treści w jednym żądaniu: użyj tej metody, jeśli plik może być przesyłane w jednym żądaniu, jeśli nie ma określonego limitu czasowego dla lub nie trzeba wyświetlać wskaźnika postępu przesyłania. Ten jest najlepsze, ponieważ wymaga mniejszej liczby żądań i zapewnia skuteczność reklam.
  • Prześlij treści w kilku fragmentach: użyj tej metody, jeśli musisz. zmniejsza ilość danych przesyłanych w jednym żądaniu. Może być konieczne aby ograniczyć ilość przesyłanych danych w przypadku użytkowników o określonym czasie tak jak w przypadku określonych klas żądań App Engine. Ta metoda jest przydatna również wtedy, gdy musisz podać dostosowany wskaźnik, aby pokazuje postęp przesyłania.

HTTP – pojedyncze żądanie

  1. Utwórz żądanie PUT do identyfikatora URI sesji możliwej do wznowienia.
  2. Dodaj dane pliku do treści żądania.
  3. Dodaj nagłówek HTTP Content-Length ustawiony na liczbę bajtów w pliku.
  4. Wyślij prośbę. Jeśli prośba o przesłanie zostanie przerwana lub otrzymasz na odpowiedź 5xx, wykonaj czynności opisane w sekcji Wznawianie przerwanego przesyłania.

HTTP – wiele żądań

  1. Utwórz żądanie PUT do identyfikatora URI sesji możliwej do wznowienia.

  2. Dodaj dane fragmentu do treści żądania. Utwórz fragmenty w wielokrotnościach Rozmiar 256 KB (256 x 1024 bajty) z wyjątkiem ostatniego zakończonego fragmentu przesyłanie. Staraj się, by rozmiar fragmentu był jak największy, efektywne.

  3. Dodaj te nagłówki HTTP:

    • Content-Length Ustaw liczbę bajtów w bieżącym fragmencie.
    • Content-Range Ustaw, aby pokazywać, jakie bajty w przesyłanym pliku. Dla: przykładowy Content-Range: bytes 0-524287/2000000 pokazuje, że przesyłasz plik cookie pierwszych 524 288 bajtów (256 x 1024 x 2) do pliku o rozmiarze 2 000 000 bajtów.
  4. Wyślij żądanie i przetwórz odpowiedź. Jeśli prośba o przesłanie jest lub jeśli otrzymasz odpowiedź 5xx, postępuj zgodnie z procedurą opisaną w Wznawianie przerwanego przesyłania

  5. Powtórz kroki od 1 do 4 dla każdego fragmentu, który pozostanie w pliku. Użyj Range w odpowiedzi, aby określić miejsce rozpoczęcia następnego fragmentu. Nie zakładaj, że serwer otrzymał wszystkie bajty wysłane w poprzednim żądaniu.

Po zakończeniu przesyłania całego pliku otrzymasz komunikat 200 OK lub Odpowiedź 201 Created wraz z wszelkimi 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 poprosić o stan przesyłania, utwórz pustą prośbę PUT do identyfikator URI sesji do wznowienia.

  2. Dodaj nagłówek Content-Range, aby wskazać, że bieżąca pozycja w tabeli nieznany plik. Na przykład ustaw Content-Range na */2000000, jeśli całkowita długość pliku to 2 000 000 bajtów. Jeśli nie znasz pełnego rozmiaru ustaw Content-Range na */*.

  3. Wyślij prośbę.

  4. Przetwórz odpowiedź:

    • Odpowiedź 200 OK lub 201 Created wskazuje, że przesyłanie zostało przesłane nie są wymagane żadne dodatkowe działania.
    • Odpowiedź 308 Resume Incomplete oznacza, że musisz kontynuować aby przesłać plik.
    • Odpowiedź 404 Not Found wskazuje, że sesja przesyłania wygasła i przesyłanie należy rozpocząć jeszcze raz od początku.
  5. Jeśli otrzymasz odpowiedź 308 Resume Incomplete, przetwórz Nagłówek Range odpowiedzi określający, które bajty odebrał serwer. Jeśli odpowiedź nie ma nagłówka Range, nie odebrano żadnych bajtów. Na przykład nagłówek Range o wartości bytes=0-42 wskazuje, że pierwszy Odebrano 43 bajty pliku i że następny fragment do przesłania będzie zaczynać się od bajtu 44.

  6. Wiesz już, gdzie wznowić przesyłanie, możesz więc przejść dalej. zaczynając od następnego bajtu. Dodaj Content-Range wskazujący, jaką część pliku należy wysłać. Dla: przykład Content-Range: bytes 43-1999999 wskazuje, że wysyła bajty od 44 do 2 000 000.

Postępowanie w przypadku błędów przesyłania multimediów

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

  • W przypadku 5xx błędów wznów lub spróbuj ponownie przesyłać pliki, które nie powiodły się z powodu połączenia . Więcej informacji o postępowaniu z błędami 5xx znajdziesz tutaj Błędy 500, 502, 503 i 504.
  • W przypadku 403 rate limit błędów spróbuj przesłać ponownie. Więcej informacji na temat: obsługa błędów 403 rate limit, zapoznaj się z artykułem Błąd 403: rateLimitExceeded.
  • Uruchom ponownie wszelkie błędy 4xx (w tym 403) podczas, gdy przesyłanie można wznowić przesyłanie. Te błędy oznaczają, że sesja przesyłania wygasła i należy ją uruchomione ponownie przez żądanie nowego identyfikatora URI sesji. Sesje przesyłania wygasają także po tygodniu braku aktywności.

Importowanie do Dokumentów Google

Podczas tworzenia pliku na Dysku warto przekonwertować plik do typu pliku Google Workspace, takiego jak Dokumenty Google, Arkusze. Możesz na przykład przekształcić dokument z ulubionego edytora tekstu do Dokumentów, aby móc korzystać funkcje zabezpieczeń.

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

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 zobaczyć, czy dostępna jest konwersja, przed utworzeniem pliku sprawdź tablicę importFormats zasobu about. Obsługiwane konwersje są dostępne dynamicznie w tej tablicy. Niektóre typowe formaty importu są następujące:

ZDo
Microsoft Word, OpenDocument Text, HTML, RTF, zwykły tekstDokumenty Google
Microsoft Excel, arkusz kalkulacyjny OpenDocument, 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 multimedia i konwertujesz je w trakcie żądania update na Dokumentów, Arkuszy lub Prezentacji, pełna treść dokumentu jest zastąpiona.

Gdy konwertujesz obraz na plik Dokumentów, Dysk używa Optyczne rozpoznawanie znaków (OCR) do konwertowania obrazu na tekst. Dostępne opcje Popraw jakość algorytmu OCR przez określenie odpowiedniego BCP 47 kod języka w ocrLanguage. . Wyodrębniony tekst pojawi się w dokumencie obok umieszczonego obrazu.

Używanie wcześniej wygenerowanego identyfikatora do przesyłania plików

Interfejs Drive API umożliwia pobranie listy wstępnie wygenerowanych identyfikatorów plików, są używane do przesyłania i tworzenia zasobów. Prośby o przesłanie i utworzenie plików użyć wstępnie wygenerowanych identyfikatorów. Ustaw pole id w metadanych pliku.

Aby utworzyć wstępnie wygenerowane identyfikatory, wywołaj files.generateIds z liczby identyfikatorów do utworzenia.

Jeśli napotkasz nieokreślone problemy, możesz bezpiecznie ponawiać próby przesłania za pomocą wstępnie wygenerowanych identyfikatorów. błąd serwera lub przekroczenie limitu czasu. Jeśli plik został utworzony, kolejne ponownych prób zwraca błąd HTTP 409 i nie tworzą duplikatów plików.

Zdefiniuj tekst możliwy do indeksowania dla nieznanych typów plików

Użytkownicy mogą wyszukiwać treść dokumentów za pomocą interfejsu Dysku. Możesz też użyj files.list i fullText do wyszukiwania treści z aplikacji. Aby uzyskać więcej informacji, przeczytaj artykuł Wyszukiwanie plików i folderów.

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

Więcej informacji o tekście możliwym do indeksowania znajdziesz w artykule Zarządzanie plikiem metadanych.