Mengupload data file

Google Drive API memungkinkan Anda mengupload data file saat membuat atau memperbarui File. Untuk mengetahui cara membuat file khusus metadata, seperti folder, lihat Membuat file khusus metadata.

Ada tiga jenis upload yang dapat Anda lakukan:

  • Upload sederhana (uploadType=media): Gunakan jenis upload ini untuk mentransfer file media berukuran kecil (5 MB atau kurang) tanpa menyediakan metadata. Untuk melakukan upload sederhana, lihat Melakukan upload sederhana.

  • Upload multibagian (uploadType=multipart): "Gunakan jenis upload ini untuk mentransfer file kecil (5 MB atau kurang) beserta metadata yang mendeskripsikan file, dalam satu permintaan. Untuk melakukan upload multibagian, lihat Melakukan upload multibagian.

  • Upload yang dapat dilanjutkan (uploadType=resumable): Gunakan jenis upload ini untuk file besar (lebih dari 5 MB) dan saat ada kemungkinan besar gangguan jaringan, seperti saat membuat file dari aplikasi seluler. Upload yang dapat dilanjutkan juga merupakan pilihan tepat untuk sebagian besar aplikasi karena juga dapat digunakan untuk file kecil dengan biaya minimal satu permintaan HTTP tambahan per upload. Untuk melakukan upload yang dapat dilanjutkan, lihat Melakukan upload yang dapat dilanjutkan.

Library klien Google API mengimplementasikan setidaknya salah satu jenis upload ini. Baca dokumentasi library klien untuk detail tambahan tentang cara menggunakan setiap jenis.

Gunakan PATCH vs. PUT

Sebagai penyegaran, kata kerja HTTP PATCH mendukung pembaruan resource file parsial sedangkan kata kerja HTTP PUT mendukung penggantian resource penuh. Perhatikan bahwa PUT dapat menyebabkan perubahan yang dapat menyebabkan gangguan saat menambahkan kolom baru ke resource yang ada.

Saat mengupload resource file, gunakan panduan berikut:

  • Gunakan kata kerja HTTP yang didokumentasikan dalam referensi API untuk permintaan awal upload yang dapat dilanjutkan atau untuk satu-satunya permintaan upload sederhana atau multibagian.
  • Gunakan PUT untuk semua permintaan berikutnya untuk upload yang dapat dilanjutkan setelah permintaan dimulai. Permintaan ini akan mengupload konten, terlepas dari metode yang dipanggil.

Lakukan upload sederhana

Untuk melakukan upload sederhana, gunakan metode files.create dengan uploadType=media.

Berikut ini cara melakukan upload sederhana:

HTTP

  1. Buat permintaan POST ke URI /upload metode dengan parameter kueri uploadType=media:

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

  2. Tambahkan data file ke isi permintaan.

  3. Tambahkan header HTTP ini:

    • Content-Type. Setel ke jenis media MIME objek yang diupload.
    • Content-Length. Setel ke jumlah byte yang Anda upload. Jika Anda menggunakan potongan encoding transfer, header ini tidak diperlukan.
  4. Kirim permintaan. Jika permintaan berhasil, server akan menampilkan kode status HTTP 200 OK beserta metadata file. {HTTP}

Saat Anda melakukan upload sederhana, metadata dasar akan dibuat dan beberapa atribut disimpulkan dari file tersebut, seperti jenis MIME atau modifiedTime. Anda dapat menggunakan upload sederhana jika Anda memiliki file kecil dan metadata file tidak penting.

Melakukan upload multibagian

Permintaan upload multibagian memungkinkan Anda mengupload metadata dan data dalam permintaan yang sama. Gunakan opsi ini jika data yang Anda kirim cukup kecil untuk diupload lagi, secara keseluruhan, jika koneksi gagal.

Untuk melakukan upload multibagian, gunakan metode files.create dengan uploadType=multipart.

Berikut ini cara melakukan upload multibagian:

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. Buat permintaan POST ke URI /upload metode dengan parameter kueri uploadType=multipart:

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

  2. Buat isi permintaan. Format isi sesuai dengan jenis konten multibagian/terkait RFC 2387, yang berisi dua bagian:

    • Metadata. Metadata harus didahulukan dan harus memiliki header Content-Type yang ditetapkan ke application/json; charset=UTF-8. Tambahkan metadata file dalam format JSON.
    • Media. Media harus ada di urutan kedua dan harus memiliki header Content-Type dari jenis MIME apa pun. Tambahkan data file ke bagian media.

    Identifikasi setiap bagian dengan string batas, yang diawali dengan dua tanda hubung. Selain itu, tambahkan dua tanda hubung setelah string batas akhir.

  3. Tambahkan header HTTP tingkat atas berikut:

    • Content-Type. Tetapkan ke multipart/related dan sertakan string batas yang Anda gunakan untuk mengidentifikasi berbagai bagian permintaan. Contoh: Content-Type: multipart/related; boundary=foo_bar_baz
    • Content-Length. Setel ke jumlah total byte dalam isi permintaan.
  4. Kirim permintaan.

Untuk membuat atau memperbarui bagian metadata saja, tanpa data terkait, kirim permintaan POST atau PATCH ke endpoint resource standar: https://www.googleapis.com/drive/v3/files Jika permintaan berhasil, server akan menampilkan kode status HTTP 200 OK beserta metadata file.

Saat membuat file, sebaiknya tentukan ekstensi file di kolom name file. Misalnya, saat membuat file JPEG foto, Anda mungkin menentukan sesuatu seperti "name": "photo.jpg" dalam metadata. Panggilan berikutnya ke files.get akan menampilkan properti fileExtension hanya baca yang berisi ekstensi yang awalnya ditentukan di kolom name.

Melakukan upload yang dapat dilanjutkan

Upload yang dapat dilanjutkan memungkinkan Anda melanjutkan operasi upload setelah kegagalan komunikasi mengganggu aliran data. Karena Anda tidak perlu memulai ulang upload file besar dari awal, upload yang dapat dilanjutkan juga dapat mengurangi penggunaan bandwidth jika terjadi kegagalan jaringan.

Upload yang dapat dilanjutkan berguna ketika ukuran file Anda sangat bervariasi atau jika ada batas waktu tetap untuk permintaan (seperti tugas latar belakang OS seluler dan permintaan App Engine tertentu). Anda juga dapat menggunakan upload yang dapat dilanjutkan jika ingin menampilkan status progres upload.

Upload yang dapat dilanjutkan terdiri dari beberapa langkah tingkat tinggi:

  1. Mengirim permintaan awal dan mengambil URI sesi yang dapat dilanjutkan.
  2. Mengupload data dan memantau status upload.
  3. (opsional) Jika upload terganggu, lanjutkan upload.

Mengirim permintaan awal

Untuk memulai upload yang dapat dilanjutkan, gunakan metode files.create dengan uploadType=resumable.

HTTP

  1. Buat permintaan POST ke URI /upload metode dengan parameter kueri uploadType=resumable:

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

    Jika permintaan inisiasi berhasil, respons akan menyertakan kode status HTTP 200 OK. Selain itu, kode ini menyertakan header Location yang menentukan URI sesi yang dapat dilanjutkan:

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

    Simpan URI sesi yang dapat dilanjutkan agar Anda dapat mengupload data file dan membuat kueri status upload. Masa berlaku URI sesi yang dapat dilanjutkan akan berakhir setelah satu minggu.

  2. Jika Anda memiliki metadata untuk file tersebut, tambahkan metadata ke isi permintaan dalam format JSON. Jika tidak, kosongkan isi permintaan.

  3. Tambahkan header HTTP ini:

    • X-Upload-Content-Type. Opsional. Tetapkan ke jenis MIME data file, yang ditransfer dalam permintaan berikutnya. Jika jenis MIME data tidak ditentukan dalam metadata atau melalui header ini, objek akan ditayangkan sebagai application/octet-stream.
    • X-Upload-Content-Length. Opsional. Tetapkan ke jumlah byte data file yang ditransfer dalam permintaan berikutnya.
    • Content-Type. Diperlukan jika Anda memiliki metadata untuk file. Tetapkan ke application/json; charset=UTF-8.
    • Content-Length. Wajib, kecuali jika Anda menggunakan potongan encoding transfer. Setel ke jumlah byte dalam isi permintaan awal ini.
  4. Kirim permintaan. Jika permintaan untuk memulai sesi berhasil, respons akan menyertakan kode status 200 OK HTTP. Selain itu, respons menyertakan header Location yang menentukan URI sesi yang dapat dilanjutkan. Gunakan URI sesi yang dapat dilanjutkan untuk mengupload data file dan membuat kueri status upload. Masa berlaku URI sesi yang dapat dilanjutkan akan berakhir setelah satu minggu.

  5. Salin dan simpan URL sesi yang dapat dilanjutkan.

  6. Lanjutkan ke Mengupload konten.

Mengupload konten

Ada dua cara untuk mengupload file dengan sesi yang dapat dilanjutkan:

  • Upload konten dalam satu permintaan: Gunakan pendekatan ini saat file dapat diupload dalam satu permintaan, jika tidak ada batas waktu tetap untuk satu permintaan, atau Anda tidak perlu menampilkan indikator progres upload. Pendekatan ini adalah yang terbaik karena memerlukan lebih sedikit permintaan dan menghasilkan performa yang lebih baik.
  • Mengupload konten dalam beberapa potongan: Gunakan pendekatan ini jika Anda harus mengurangi jumlah data yang ditransfer dalam satu permintaan. Anda mungkin perlu mengurangi data yang ditransfer saat ada batas waktu tetap untuk masing-masing permintaan, seperti yang dapat terjadi pada class permintaan App Engine tertentu. Pendekatan ini juga berguna jika Anda harus memberikan indikator yang disesuaikan untuk menampilkan progres upload.

HTTP - permintaan tunggal

  1. Buat permintaan PUT ke URI sesi yang dapat dilanjutkan.
  2. Tambahkan data file ke isi permintaan.
  3. Tambahkan header HTTP Panjang Konten, tetapkan ke jumlah byte dalam file.
  4. Kirim permintaan. Jika permintaan upload terhenti, atau jika Anda menerima respons 5xx, ikuti prosedur dalam Melanjutkan upload yang terhenti.

HTTP - beberapa permintaan

  1. Buat permintaan PUT ke URI sesi yang dapat dilanjutkan.

  2. Tambahkan data potongan ke isi permintaan. Buat potongan dalam kelipatan 256 KB (256 x 1024 byte), kecuali untuk potongan terakhir yang menyelesaikan upload. Pertahankan ukuran potongan sebesar mungkin agar proses upload efisien.

  3. Tambahkan header HTTP ini:

    • Content-Length. Setel ke jumlah byte dalam potongan saat ini.
    • Content-Range. Setel untuk menampilkan byte mana dalam file yang Anda upload. Misalnya, Content-Range: bytes 0-524287/2000000 menunjukkan bahwa Anda mengupload 524.288 byte pertama (256 x 1024 x 2) dalam file 2.000.000 byte.
  4. Kirim permintaan, dan proses responsnya. Jika permintaan upload terganggu, atau jika Anda menerima respons 5xx, ikuti prosedur dalam Melanjutkan upload yang terhenti.

  5. Ulangi langkah 1 hingga 4 untuk setiap potongan yang tersisa dalam {i>file<i}. Gunakan header Range dalam respons untuk menentukan tempat memulai potongan berikutnya. Jangan berasumsi bahwa server menerima semua byte yang dikirim dalam permintaan sebelumnya.

Setelah seluruh upload file selesai, Anda akan menerima respons 200 OK atau 201 Created, beserta metadata apa pun yang terkait dengan resource.

Melanjutkan upload yang terhenti

Jika permintaan upload dihentikan sebelum respons, atau jika Anda menerima respons 503 Service Unavailable, Anda harus melanjutkan upload yang terhenti.

HTTP

  1. Untuk meminta status upload, buat permintaan PUT kosong ke URI sesi yang dapat dilanjutkan.

  2. Menambahkan header Content-Range untuk menunjukkan bahwa posisi saat ini pada file tidak diketahui. Misalnya, setel Content-Range ke */2000000 jika total panjang file adalah 2.000.000 byte. Jika Anda tidak mengetahui ukuran penuh file, setel Content-Range ke */*.

  3. Kirim permintaan.

  4. Proses respons:

    • Respons 200 OK atau 201 Created menunjukkan bahwa upload selesai, dan tidak diperlukan tindakan lebih lanjut.
    • Respons 308 Resume Incomplete menunjukkan bahwa Anda harus terus mengupload file.
    • Respons 404 Not Found menunjukkan bahwa sesi upload telah berakhir dan upload harus dimulai ulang dari awal.
  5. Jika Anda menerima respons 308 Resume Incomplete, proses header Range respons untuk menentukan byte yang telah diterima server. Jika respons tidak memiliki header Range, berarti tidak ada byte yang diterima. Misalnya, header Range dari bytes=0-42 menunjukkan bahwa 43 byte pertama file telah diterima, dan potongan berikutnya akan dimulai dengan byte 44.

  6. Setelah mengetahui tempat melanjutkan upload, lanjutkan upload file mulai dari byte berikutnya. Sertakan header Content-Range untuk menunjukkan bagian file mana yang Anda kirim. Misalnya, Content-Range: bytes 43-1999999 menunjukkan bahwa Anda mengirim byte 44 hingga 2.000.000.

Menangani error upload media

Saat Anda mengupload media, ikuti praktik terbaik berikut untuk menangani error:

  • Untuk error 5xx, lanjutkan atau coba lagi upload yang gagal karena gangguan koneksi. Untuk informasi selengkapnya tentang penanganan error 5xx, lihat error 500, 502, 503, 504.
  • Untuk 403 rate limit error, coba upload lagi. Untuk informasi lebih lanjut tentang penanganan error 403 rate limit, lihat error 403: rateLimitExceeded.
  • Untuk error 4xx (termasuk 403) selama upload yang dapat dilanjutkan, mulai ulang upload. Error ini menunjukkan bahwa sesi upload telah berakhir dan harus dimulai ulang dengan meminta URI sesi baru. Sesi upload juga akan berakhir masa berlakunya setelah tidak aktif selama satu minggu.

Impor ke jenis Google Dokumen

Saat membuat file di Drive, Anda mungkin ingin mengonversi file tersebut menjadi jenis file Google Workspace, seperti Google Dokumen atau Spreadsheet. Misalnya, mungkin Anda ingin mengubah dokumen dari pengolah kata favorit ke Dokumen untuk memanfaatkan fiturnya.

Untuk mengonversi file menjadi jenis file Google Workspace tertentu, tentukan mimeType Google Workspace saat membuat file.

Berikut cara mengonversi file CSV menjadi sheet 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({
      resource: fileMetadata,
      media: media,
      fields: 'id',
    });
    console.log('File Id:', file.data.id);
    return file.data.id;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

drive/snippets/drive_v3/src/DriveUploadWithConversion.php
use Google\Client;
use Google\Service\Drive;
function uploadWithConversion()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $fileMetadata = new Drive\DriveFile(array(
            'name' => 'My Report',
            'mimeType' => 'application/vnd.google-apps.spreadsheet'));
        $content = file_get_contents('../files/report.csv');
        $file = $driveService->files->create($fileMetadata, array(
            'data' => $content,
            'mimeType' => 'text/csv',
            'uploadType' => 'multipart',
            'fields' => 'id'));
        printf("File ID: %s\n", $file->id);
        return $file->id;
    } catch(Exception $e) {
        echo "Error Message: ".$e;
    }

}

.NET

drive/snippets/drive_v3/DriveV3Snippets/UploadWithConversion.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Services;

namespace DriveV3Snippets
{
    // Class to demonstrate Drive's upload with conversion use-case.
    public class UploadWithConversion
    {
        /// <summary>
        /// Upload file with conversion.
        /// </summary>
        /// <param name="filePath">Id of the spreadsheet file.</param>
        /// <returns>Inserted file id if successful, null otherwise.</returns>
        public static string DriveUploadWithConversion(string filePath)
        {
            try
            {
                /* Load pre-authorized user credentials from the environment.
                 TODO(developer) - See https://developers.google.com/identity for
                 guides on implementing OAuth2 for your application. */
                GoogleCredential credential = GoogleCredential.GetApplicationDefault()
                    .CreateScoped(DriveService.Scope.Drive);

                // Create Drive API service.
                var service = new DriveService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Drive API Snippets"
                });

                // Upload file My Report on drive.
                var fileMetadata = new Google.Apis.Drive.v3.Data.File()
                {
                    Name = "My Report",
                    MimeType = "application/vnd.google-apps.spreadsheet"
                };
                FilesResource.CreateMediaUpload request;
                // Create a new drive.
                using (var stream = new FileStream(filePath,
                           FileMode.Open))
                {
                    // Create a new file, with metadata and stream.
                    request = service.Files.Create(
                        fileMetadata, stream, "text/csv");
                    request.Fields = "id";
                    request.Upload();
                }

                var file = request.ResponseBody;
                // Prints the uploaded file id.
                Console.WriteLine("File ID: " + file.Id);
                return file.Id;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else if (e is FileNotFoundException)
                {
                    Console.WriteLine("File not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

Untuk melihat apakah konversi tersedia, periksa array importFormats resource about sebelum membuat file. Konversi yang didukung tersedia secara dinamis dalam array ini. Beberapa format impor yang umum adalah:

FromMenjadi
Microsoft Word, Teks OpenDocument, HTML, RTF, teks biasaGoogle Dokumen
Microsoft Excel, OpenDocument Spreadsheet, CSV, TSV, teks biasaGoogle Spreadsheet
Microsoft PowerPoint, Presentasi OpenDocumentGoogle Slide
JPEG, PNG, GIF, BMP, PDFGoogle Dokumen (menyematkan gambar di Dokumen)
Teks biasa (jenis MIME khusus), JSONGoogle Apps Script

Saat Anda mengupload dan mengonversi media selama permintaan update ke file Dokumen, Spreadsheet, atau Slide, isi lengkap dokumen akan diganti.

Saat Anda mengonversi gambar ke Dokumen, Drive menggunakan Pengenalan Karakter Optik (OCR) untuk mengonversi gambar ke teks. Anda dapat meningkatkan kualitas algoritma OCR dengan menentukan kode bahasa BCP 47 yang berlaku dalam parameter ocrLanguage. Teks yang diekstrak akan muncul di Dokumen bersama dengan gambar yang disematkan.

Gunakan ID yang telah dibuat sebelumnya untuk mengupload file

Drive API memungkinkan Anda mengambil daftar ID file yang telah dibuat sebelumnya yang digunakan untuk mengupload dan membuat resource. Permintaan upload dan pembuatan file dapat menggunakan ID yang telah dibuat sebelumnya ini. Tetapkan kolom id dalam metadata file.

Untuk membuat ID siap pakai, panggil files.generateIds dengan jumlah ID yang akan dibuat.

Anda dapat mencoba kembali upload dengan ID yang telah dibuat sebelumnya jika terjadi error server atau waktu tunggu yang tidak tentu. Jika file berhasil dibuat, percobaan ulang berikutnya akan menampilkan error HTTP 409 dan file duplikat tidak akan dibuat.

Menentukan teks yang dapat diindeks untuk jenis file yang tidak diketahui

Pengguna dapat menggunakan UI Drive untuk menemukan konten dokumen. Anda juga dapat menggunakan files.list dan kolom fullText untuk menelusuri konten dari aplikasi Anda. Untuk mengetahui informasi selengkapnya, lihat Menelusuri file dan folder.

Drive otomatis mengindeks dokumen untuk penelusuran saat mengenali jenis file, termasuk dokumen teks, PDF, gambar dengan teks, dan jenis umum lainnya. Jika aplikasi Anda menyimpan jenis file lain (seperti gambar, video, dan pintasan), Anda dapat meningkatkan visibilitas dengan menyediakan teks yang dapat diindeks di kolom contentHints.indexableText pada file tersebut.

Untuk mengetahui informasi selengkapnya tentang teks yang dapat diindeks, lihat Mengelola metadata file.