Dosya verilerini yükle

Google Drive API, bir File oluşturduğunuzda veya güncellediğinizde dosya verilerini yüklemenize olanak tanır. Klasör gibi yalnızca meta veri dosyalarını oluşturma hakkında bilgi edinmek için Yalnızca meta veri dosyaları oluşturma bölümüne bakın.

Gerçekleştirebileceğiniz üç tür yükleme vardır:

  • Basit yükleme (uploadType=media): Meta veri sağlamadan küçük bir medya dosyasını (5 MB veya daha küçük) aktarmak için bu yükleme türünü kullanın. Basit bir yükleme yapmak için Basit yükleme yapma bölümünü inceleyin.

  • Çok parçalı yükleme (uploadType=multipart): "Küçük bir dosyayı (5 MB veya daha küçük) ve dosyayı tanımlayan meta verileri tek bir istekte aktarmak için bu yükleme türünü kullanın. Çok parçalı bir yükleme gerçekleştirmek için Çok parçalı yükleme gerçekleştirme bölümüne bakın.

  • Devam ettirilebilir yükleme (uploadType=resumable): Bu yükleme türünü, büyük (5 MB'tan büyük) dosyalar için ve mobil uygulamadan dosya oluşturmak gibi ağ kesintisi ihtimali yüksek olduğunda kullanın. Devam ettirilebilir yüklemeler, yükleme başına minimum bir HTTP isteği karşılığında küçük dosyalarda da çalıştıkları için çoğu uygulama için iyi bir seçenektir. Devam ettirilebilir bir yükleme gerçekleştirmek için Devam ettirilebilir yükleme gerçekleştirme bölümüne bakın.

Google API istemci kitaplıkları, bu yükleme türlerinden en az birini uygular. Her bir türün nasıl kullanılacağıyla ilgili ek ayrıntılar için istemci kitaplığı belgelerini inceleyin.

PATCH ve PUT kullanın

Hatırlatmak gerekirse PATCH HTTP fiili, kısmi dosya kaynağı güncellemesini desteklerken PUT HTTP fiili tam kaynak değiştirmeyi destekler. PUT işlevinin, mevcut bir kaynağa yeni bir alan eklerken değişikliklere yol açabileceğini unutmayın.

Bir dosya kaynağı yüklerken aşağıdaki yönergeleri kullanın:

  • Devam ettirilebilir bir yüklemenin ilk isteği veya basit ya da çok parçalı bir yüklemenin tek isteği için API referansında belgelenen HTTP fiilini kullanın.
  • İstek başladıktan sonra, devam ettirilebilir yükleme için sonraki tüm istekler için PUT kullanın. Bu istekler, çağrılan yöntemden bağımsız olarak içerik yükler.

Basit bir yükleme işlemi gerçekleştirin

Basit bir yükleme yapmak için uploadType=media ile files.create yöntemini kullanın.

Aşağıda, basit bir yüklemenin nasıl gerçekleştirileceği gösterilmektedir:

HTTP

  1. uploadType=media sorgu parametresiyle yöntemin /upload URI'sına bir POST isteği oluşturun:

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

  2. Dosya verilerini istek gövdesine ekleyin.

  3. Şu HTTP üstbilgilerini ekleyin:

    • Content-Type. Yüklenen nesnenin MIME medya türüne ayarlayın.
    • Content-Length. Yüklediğiniz bayt sayısını ayarlayın. Parçalı aktarım kodlaması kullanıyorsanız bu başlık gerekli değildir.
  4. İsteği gönderin. İstek başarılı olursa sunucu, dosyanın meta verileriyle birlikte HTTP 200 OK durum kodunu döndürür. {HTTP}

Basit bir yükleme gerçekleştirdiğinizde, temel meta veriler oluşturulur ve dosyadan MIME türü veya modifiedTime gibi bazı özellikler tahmin edilir. Küçük dosyalarınızın olduğu ve dosya meta verilerinin önemli olmadığı durumlarda basit bir yükleme kullanabilirsiniz.

Çok parçalı yükleme gerçekleştir

Çok parçalı yükleme isteği, meta verileri ve verileri aynı isteğe yüklemenize olanak tanır. Gönderdiğiniz veriler, bağlantı başarısız olması durumunda tamamen tekrar yüklenecek kadar küçükse bu seçeneği kullanın.

Çok parçalı bir yükleme gerçekleştirmek için uploadType=multipart ile files.create yöntemini kullanın.

Aşağıda, çok parçalı bir yüklemenin nasıl gerçekleştirileceği gösterilmektedir:

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. uploadType=multipart sorgu parametresiyle yöntemin /upload URI'sına bir POST isteği oluşturun:

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

  2. İsteğin gövdesini oluşturun. Gövdeyi, iki bölümden oluşan çok parçalı/ilgili içerik türüne göre RFC 2387'ye göre biçimlendirin:

    • Meta veriler. Meta veriler önce gelmeli ve Content-Type üst bilgisi application/json; charset=UTF-8 olarak ayarlanmalıdır. Dosyanın meta verilerini JSON biçiminde ekleyin.
    • Medya. Medya ikinci sırada yer almalı ve herhangi bir MIME türünde Content-Type üstbilgisine sahip olmalıdır. Dosya verilerini medya bölümüne ekleyin.

    Her bölümü, önünde iki kısa çizgi bulunan bir sınır dizesiyle tanımlayın. Ayrıca, son sınır dizesinden sonra iki kısa çizgi ekleyin.

  3. Şu üst düzey HTTP üstbilgilerini ekleyin:

    • Content-Type. multipart/related değerine ayarlayın ve isteğin farklı kısımlarını tanımlamak için kullandığınız sınır dizesini ekleyin. Örnek: Content-Type: multipart/related; boundary=foo_bar_baz
    • Content-Length. İstek gövdesindeki toplam bayt sayısına ayarlayın.
  4. İsteği gönderin.

İlişkili veriler olmadan yalnızca meta veri bölümünü oluşturmak veya güncellemek için standart kaynak uç noktasına bir POST veya PATCH isteği gönderin: https://www.googleapis.com/drive/v3/files İstek başarılı olursa sunucu, dosyanın meta verileriyle birlikte HTTP 200 OK durum kodunu döndürür.

Dosya oluştururken dosyanın name alanında bir dosya uzantısı belirtmelidir. Örneğin, bir fotoğraf JPEG dosyası oluştururken meta verilerde "name": "photo.jpg" gibi bir şey belirtebilirsiniz. files.get öğesine yapılan sonraki çağrılar, başlangıçta name alanında belirtilen uzantıyı içeren salt okunur fileExtension özelliğini döndürür.

Devam ettirilebilir yükleme gerçekleştir

Devam ettirilebilir yükleme, bir iletişim hatası veri akışını kesintiye uğrattıktan sonra yükleme işlemini devam ettirebilmenizi sağlar. Büyük dosya yüklemelerini baştan başlatmanıza gerek olmadığı için devam ettirilebilir yüklemeler, ağ hatası durumunda bant genişliği kullanımınızı da azaltabilir.

Devam ettirilebilir yüklemeler, dosya boyutlarınızın büyük ölçüde farklılık gösterdiği durumlarda veya istekler için sabit bir süre sınırı varsa (ör. mobil işletim sistemi arka plan görevleri ve belirli App Engine istekleri) kullanışlıdır. Yükleme ilerleme çubuğu göstermek istediğiniz durumlarda devam ettirilebilir yüklemeleri de kullanabilirsiniz.

Devam ettirilebilir bir yükleme birkaç üst düzey adımdan oluşur:

  1. İlk isteği gönderin ve devam ettirilebilir oturum URI'sını alın.
  2. Verileri yükleyin ve yükleme durumunu izleyin.
  3. (İsteğe bağlı) Yükleme kesintiye uğradıysa yüklemeyi devam ettirin.

İlk isteği gönderme

Devam ettirilebilir bir yükleme başlatmak için uploadType=resumable ile files.create yöntemini kullanın.

HTTP

  1. uploadType=resumable sorgu parametresiyle yöntemin /upload URI'sına bir POST isteği oluşturun:

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

    Başlatma isteği başarılı olursa yanıt, 200 OK HTTP durum kodunu içerir. Ayrıca, devam ettirilebilir oturum URI'sını belirten bir Location üst bilgisi içerir:

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

    Dosya verilerini yükleyebilmek ve yükleme durumunu sorgulayabilmek için devam ettirilebilir oturum URI'sını kaydedin. Devam ettirilebilir bir oturum URI'sının süresi bir hafta sonra dolar.

  2. Dosya için meta verileriniz varsa meta verileri istek gövdesine JSON biçiminde ekleyin. Aksi takdirde, isteğin gövde metnini boş bırakın.

  3. Şu HTTP üstbilgilerini ekleyin:

    • X-Upload-Content-Type. İsteğe bağlı. Sonraki isteklerde aktarılacak dosya verilerinin MIME türüne ayarlayın. Verilerin MIME türü meta verilerde veya bu üstbilgide belirtilmemişse nesne application/octet-stream. olarak sunulur
    • X-Upload-Content-Length. İsteğe bağlı. Sonraki isteklerde aktarılacak dosya verilerinin bayt sayısını ayarlayın.
    • Content-Type. Dosya için meta verileriniz varsa gereklidir. application/json; charset=UTF-8 olarak ayarlayın.
    • Content-Length. Parçalı aktarım kodlaması kullanmıyorsanız zorunludur. Bu ilk isteğin gövdesindeki bayt sayısına ayarlayın.
  4. İsteği gönderin. Oturum başlatma isteği başarılı olursa yanıtta bir 200 OK HTTP durum kodu görüntülenir. Buna ek olarak, yanıt devam ettirilebilir oturum URI'sını belirten bir Location üst bilgisi içerir. Dosya verilerini yüklemek ve yükleme durumunu sorgulamak için devam ettirilebilir oturum URI'sını kullanın. Devam ettirilebilir bir oturum URI'sının süresi bir hafta sonra dolar.

  5. Devam ettirilebilir oturum URL'sini kopyalayıp kaydedin.

  6. İçeriği yükleme bölümüne geçin.

İçeriği yükleyin

Devam ettirilebilir oturumu olan bir dosyayı iki şekilde yükleyebilirsiniz:

  • Tek bir istekte içerik yükleme: Dosya tek bir istekte yüklenebiliyorsa, herhangi bir tek istek için sabit bir zaman sınırı yoksa veya yükleme ilerleme durumu göstergesi göstermeniz gerekmiyorsa bu yaklaşımı kullanın. Daha az istek gerektirdiği ve daha iyi performans sağladığı için bu yaklaşım en iyisidir.
  • İçeriği birden fazla parça halinde yükleyin: Tek bir istekte aktarılan veri miktarını azaltmanız gerekiyorsa bu yaklaşımı kullanın. Belirli App Engine isteği sınıflarında olduğu gibi, tek tek istekler için sabit bir süre sınırı varsa, aktarılan veri miktarını azaltmanız gerekebilir. Bu yaklaşım, yükleme ilerleme durumunu göstermek için özelleştirilmiş bir gösterge sağlamanız gerektiğinde de yararlı olur.

HTTP - tekli istek

  1. Devam ettirilebilir oturum URI'sı için bir PUT isteği oluşturun.
  2. Dosya verilerini istek gövdesine ekleyin.
  3. Dosyadaki bayt sayısına ayarlanmış bir İçerik Uzunluğu HTTP üstbilgisi ekleyin.
  4. İsteği gönderin. Yükleme isteği kesilirse veya 5xx yanıtı alırsanız Kesintiye uğrayan yüklemeyi devam ettirme bölümündeki prosedürü uygulayın.

HTTP - birden çok istek

  1. Devam ettirilebilir oturum URI'sı için bir PUT isteği oluşturun.

  2. Parçanın verilerini istek gövdesine ekleyin. Yüklemeyi tamamlayan son parça hariç, 256 KB (256 x 1.024 bayt) boyutundaki katlar halinde parçalar oluşturun. Yüklemenin verimli olması için parça boyutunu mümkün olduğunca büyük tutun.

  3. Şu HTTP üstbilgilerini ekleyin:

    • Content-Length. Geçerli yığındaki bayt sayısına ayarlayın.
    • Content-Range. Yüklediğiniz dosyadaki hangi baytları gösterecek şekilde ayarlayın. Örneğin Content-Range: bytes 0-524287/2000000, 2.000.000 baytlık bir dosyaya ilk 524.288 baytı (256 x 1024 x 2) yüklediğinizi gösterir.
  4. İsteği gönderin ve yanıtı işleyin. Yükleme isteği kesintiye uğrarsa veya 5xx yanıtı alırsanız Kesintiye uğrayan bir yüklemeyi devam ettirme bölümündeki prosedürü uygulayın.

  5. Dosyada kalan her parça için 1-4 arasındaki adımları tekrarlayın. Bir sonraki parçanın nereden başlatılacağını belirlemek için yanıttaki Range üst bilgisini kullanın. Sunucunun önceki istekte gönderilen tüm baytları aldığını varsaymayın.

Dosya yükleme işleminin tamamı tamamlandığında kaynakla ilişkili tüm meta verilerle birlikte bir 200 OK veya 201 Created yanıtı alırsınız.

Kesintiye uğrayan bir yüklemeyi devam ettirme

Yükleme isteği yanıtlanmadan önce sonlandırılırsa veya 503 Service Unavailable yanıtı alırsanız kesintiye uğrayan yüklemeyi devam ettirmeniz gerekir.

HTTP

  1. Yükleme durumunu istemek için devam ettirilebilir oturum URI'sına boş bir PUT isteği oluşturun.

  2. Dosyadaki mevcut konumun bilinmediğini belirtmek için bir Content-Range üst bilgisi ekleyin. Örneğin, toplam dosya uzunluğunuz 2.000.000 baytsa Content-Range alanını */2000000 olarak ayarlayın. Dosyanın tam boyutunu bilmiyorsanız Content-Range özelliğini */* olarak ayarlayın.

  3. İsteği gönderin.

  4. Yanıtı işleyin:

    • 200 OK veya 201 Created yanıtı, yüklemenin tamamlandığını ve başka bir işleme gerek olmadığını gösterir.
    • 308 Resume Incomplete yanıtı, dosyayı yüklemeye devam etmeniz gerektiğini belirtir.
    • 404 Not Found yanıtı, yükleme oturumunun sona erdiğini ve yüklemenin baştan başlatılması gerektiğini belirtir.
  5. Bir 308 Resume Incomplete yanıtı aldıysanız sunucunun hangi baytları aldığını belirlemek için yanıtın Range üstbilgisini işleyin. Yanıtta Range üst bilgisi yoksa hiç bayt alınmamıştır. Örneğin, bytes=0-42 türündeki Range üst bilgisi, dosyanın ilk 43 baytının alındığını ve yüklenecek bir sonraki parçanın 44 bayt ile başlayacağını belirtir.

  6. Yüklemeyi nerede devam ettireceğinizi öğrendiğinize göre, sonraki bayttan başlayarak dosyayı yüklemeye devam edebilirsiniz. Dosyanın hangi bölümünü gönderdiğinizi belirtmek için bir Content-Range üst bilgisi ekleyin. Örneğin Content-Range: bytes 43-1999999, 44 ile 2.000.000 arasında bayt gönderdiğinizi belirtir.

Medya yükleme hatalarını işleme

Medya yüklerken hataları ele almak için aşağıdaki en iyi uygulamaları izleyin:

  • 5xx hataları için, bağlantı kesintileri nedeniyle başarısız olan yüklemeleri devam ettirin veya yeniden deneyin. 5xx hatalarının ele alınması hakkında daha fazla bilgi için 500, 502, 503, 504 hatalarına bakın.
  • 403 rate limit hata varsa yüklemeyi tekrar deneyin. 403 rate limit hatalarının işlenmesi hakkında daha fazla bilgi için 403 hatası: rateLimitExceeded bölümüne bakın.
  • Devam ettirilebilir yükleme sırasında oluşan 4xx hataları (403 dahil) için yüklemeyi yeniden başlatın. Bu hatalar, yükleme oturumunun sona erdiğini ve yeni bir oturum URI'si isteyerek yeniden başlatılması gerektiğini gösterir. Yükleme oturumlarının süresi de bir hafta boyunca hiçbir işlem yapılmadığında dolar.

Google Dokümanlar türlerine aktar

Drive'da bir dosya oluşturduğunuzda bu dosyayı Google Dokümanlar veya E-Tablolar gibi bir Google Workspace dosya türüne dönüştürmek isteyebilirsiniz. Örneğin, bir dokümanı favori kelime işlemcinizden Google Dokümanlar'a dönüştürmek, bunların özelliklerinden yararlanmak isteyebilirsiniz.

Bir dosyayı belirli bir Google Workspace dosya türüne dönüştürmek için, dosyayı oluştururken Google Workspace mimeType değerini belirtin.

Aşağıda, CSV dosyasının Google Workspace e-tablosuna nasıl dönüştürüleceği gösterilmektedir:

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

Bir dönüşümün kullanılabilir olup olmadığını görmek için dosyayı oluşturmadan önce about kaynağının importFormats dizisini kontrol edin. Desteklenen dönüşümler bu dizide dinamik olarak mevcuttur. Bazı yaygın içe aktarma biçimleri şunlardır:

En düşükAlıcı
Microsoft Word, OpenDocument Metni, HTML, RTF, düz metinGoogle Dokümanlar
Microsoft Excel, OpenDocument E-tablosu, CSV, TSV, düz metinGoogle E-Tablolar
Microsoft PowerPoint, OpenDocument SunusuGoogle Slaytlar
JPEG, PNG, GIF, BMP, PDFGoogle Dokümanlar (resmi bir Dokümana yerleştirir)
Düz metin (özel MIME türü), JSONGoogle Apps Komut Dosyası

update isteği sırasında bir Dokümanlar, E-Tablolar veya Slaytlar dosyasına medya yükleyip dönüştürdüğünüzde, dokümanın tüm içeriği değiştirilir.

Bir resmi Dokümanlar'a dönüştürdüğünüzde Drive, resmi metne dönüştürmek için Optik Karakter Tanıma (OCR) özelliğini kullanır. ocrLanguage parametresinde geçerli BCP 47 dil kodunu belirterek OCR algoritmasının kalitesini iyileştirebilirsiniz. Çıkarılan metin, Dokümanda, yerleştirilen resmin yanında görünür.

Dosya yüklemek için önceden oluşturulmuş bir kimlik kullanma

Drive API, kaynak yüklemek ve oluşturmak için kullanılan önceden oluşturulmuş dosya kimliklerinin listesini almanıza olanak tanır. Yükleme ve dosya oluşturma istekleri, önceden oluşturulmuş bu kimlikleri kullanabilir. Dosya meta verilerinde id alanını ayarlayın.

Önceden oluşturulmuş kimlikler oluşturmak için oluşturulacak kimlik sayısıyla birlikte files.generateIds çağrısı yapın.

Belirsiz bir sunucu hatası veya zaman aşımı varsa yüklemeleri önceden oluşturulmuş kimliklerle güvenle yeniden deneyebilirsiniz. Dosya başarıyla oluşturulduysa sonraki denemeler HTTP 409 hatası döndürür ve kopya dosyalar oluşturmaz.

Bilinmeyen dosya türleri için dizine eklenebilir metin tanımlama

Kullanıcılar doküman içeriğini bulmak için Drive kullanıcı arayüzünü kullanabilir. Uygulamanızdan içerik aramak için files.list ve fullText alanını da kullanabilirsiniz. Daha fazla bilgi için Dosya ve klasör arama bölümüne bakın.

Drive; metin dokümanları, PDF'ler, metin içeren resimler ve diğer yaygın türler dahil olmak üzere dosya türünü tanıdığında, arama için dokümanları otomatik olarak dizine ekler. Uygulamanız diğer dosya türlerini (ör. çizim, video ve kısayollar) kaydediyorsa dosyanın contentHints.indexableText alanına dizine eklenebilir metin sağlayarak bulunabilirliği artırabilirsiniz.

Dizine eklenebilir metin hakkında daha fazla bilgi için Dosya meta verilerini yönetme başlıklı makaleye bakın.