Dosya verilerini yükle

Google Drive API, File oluştururken veya güncellerken dosya verilerini yüklemenize olanak tanır. Klasör gibi yalnızca meta veri içeren dosya oluşturma hakkında bilgi edinmek için Yalnızca meta veri içeren dosyalar oluşturma başlıklı makaleyi inceleyin.

Üç tür yükleme yapabilirsiniz:

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

  • Çok parçalı yükleme (uploadType=multipart): "Küçük bir dosyayı (5 MB veya daha az) dosyayı açıklayan meta verilerle birlikte tek bir istekle aktarmak için bu yükleme türünü kullanın. Çok parçalı yükleme yapmak için Çok parçalı yükleme yapma başlıklı makaleyi inceleyin.

  • Devam ettirilebilir yükleme (uploadType=resumable): Bu yükleme türünü büyük dosyalar (5 MB'tan büyük) ve ağ kesintisi olasılığının yüksek olduğu durumlarda (ör. mobil uygulamadan dosya oluştururken) kullanın. Devam ettirilebilir yüklemeler, küçük dosyalar için de kullanılabilir. Bu yüklemelerde yükleme başına ek bir HTTP isteği gönderilir. Devam ettirilebilir yükleme yapmak için Devam ettirilebilir yükleme yapma başlıklı makaleyi inceleyin.

Google API istemci kitaplıkları, bu yükleme türlerinden en az birini uygular. Türlerin her birinin nasıl kullanılacağıyla ilgili ek ayrıntılar için istemci kitaplığı dokümanlarına bakın.

PATCH ile PUT arasındaki farklar

PATCH HTTP fiili, kısmi dosya kaynağı güncellemesini desteklerken PUT HTTP fiili, tam kaynak değişimini destekler. PUT, mevcut bir kaynağa yeni bir alan eklerken önemli değişikliklere neden olabileceğini unutmayın.

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

  • Devam ettirilebilir yüklemenin ilk isteği veya basit ya da çok bölümlü yüklemenin tek isteği için API referansında belirtilen HTTP fiili kullanın.
  • İstek başladıktan sonra devam ettirilebilir yükleme için sonraki tüm istekler için PUT değerini kullanın. Bu istekler, çağrılan yönteme bakılmaksızın içerik yükler.

Basit bir yükleme yapın

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 yapılacağı gösterilmektedir:

HTTP

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

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

  2. Dosyanın verilerini istek gövdesine ekleyin.

  3. Aşağıdaki HTTP üst bilgilerini ekleyin:

    • Content-Type. Yüklenen nesnenin MIME medya türüne ayarlayın.
    • Content-Length. Yüklediğiniz bayt sayısına 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 yaptığınızda temel meta veriler oluşturulur ve MIME türü veya modifiedTime gibi bazı özellikler dosyadan çıkarılır. Küçük dosyalarınız varsa ve dosya meta verileri önemli değilse basit yükleme yöntemini kullanabilirsiniz.

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

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

Çok parçalı yükleme yapmak için uploadType=multipart ile files.create yöntemini kullanın.

Aşağıda, çok parçalı yüklemenin nasıl yapılacağı 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 parametresini kullanarak yöntemin /upload URI'sine 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ü RFC 2387'ye göre biçimlendirin:

    • Meta veriler. Meta veriler önce gelmelidir ve Content-Typeapplication/json; charset=UTF-8 olarak ayarlanmış bir üstbilgisi olmalıdır. Dosyanın meta verilerini JSON biçiminde ekleyin.
    • Medya. Medya ikinci sırada gelmelidir ve herhangi bir MIME türünde bir Content-Type üstbilgisi içermelidir. Dosyanın verilerini medya bölümüne ekleyin.

    Her bölümü, iki kısa çizginin önüne eklenmiş bir sınır dizesiyle tanımlayın. Ayrıca, son sınır dizesi sonrasında iki kısa çizgi ekleyin.

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

    • Content-Type. multipart/related olarak ayarlayın ve isteğin farklı bölümlerini tanımlamak için kullandığınız sınır dizesini ekleyin. Örneğin: Content-Type: multipart/related; boundary=foo_bar_baz
    • Content-Length. İstek gövdesinde bulunan toplam bayt sayısına ayarlanır.
  4. İsteği gönderin.

Yalnızca meta veri bölümünü, ilişkili veriler olmadan 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ı belirtmelidirler. Örneğin, bir fotoğraf JPEG dosyası oluştururken meta verilerde "name": "photo.jpg" gibi bir şey belirtebilirsiniz. files.get için yapılan sonraki çağrılar, name alanında başlangıçta belirtilen uzantıyı içeren salt okunur fileExtension mülkünü döndürür.

Devam ettirilebilir yükleme yapma

Devam ettirilebilir yükleme, iletişim hatası nedeniyle veri akışı kesintiye uğradıktan sonra yükleme işlemini devam ettirmenize olanak tanır. Büyük dosya yüklemelerini en baştan yeniden başlatmanız gerekmediği için devam ettirilebilir yüklemeler, ağ hatası olduğunda bant genişliği kullanımınızı da azaltabilir.

Devam ettirilebilir yüklemeler, dosya boyutlarınız büyük ölçüde değişebileceğinde veya istekler için sabit bir zaman sınırı olduğunda (ör. mobil işletim sistemi arka plan görevleri ve belirli App Engine istekleri) kullanışlıdır. Devam ettirilebilir yüklemeleri, yükleme ilerleme çubuğunu göstermek istediğiniz durumlarda da kullanabilirsiniz.

Devam ettirilebilir yükleme, birkaç genel adımdan oluşur:

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

İlk isteği gönder

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

HTTP

  1. uploadType=resumable sorgu parametresini kullanarak yöntemin /upload URI'sine 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ıtta 200 OK HTTP durum kodu yer alır. Ayrıca, devam ettirilebilir oturum URI'sini belirten bir Location başlığı da 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ükleyebilmeniz ve yükleme durumunu sorgulayabilmeniz için devam ettirilebilir oturum URI'sini kaydedin. Devam ettirilebilir oturum URI'sinin süresi bir hafta sonra dolar.

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

  3. Şu HTTP üstbilgilerini ekleyin:

    • X-Upload-Content-Type. İsteğe bağlı. Sonraki isteklerde aktarılan dosya verilerinin MIME türüne ayarlanır. Verilerin MIME türü meta verilerde veya bu başlık aracılığıyla belirtilmezse nesne application/octet-stream. olarak yayınlanır.
    • X-Upload-Content-Length. İsteğe bağlı. Sonraki isteklerde aktarılan dosya verisi bayt sayısına ayarlanır.
    • Content-Type. Dosyanın meta verileri varsa gereklidir. application/json; charset=UTF-8 olarak ayarlayın.
    • Content-Length. Parçalı aktarım kodlaması kullanmıyorsanız gereklidir. Bu ilk istekteki gövdedeki bayt sayısına ayarlanır.
  4. İsteği gönderin. Oturum başlatma isteği başarılı olursa yanıtta 200 OK HTTP durum kodu bulunur. Ayrıca yanıt, devam ettirilebilir oturum URI'sini belirten bir Location üstbilgisi içerir. Dosya verilerini yüklemek ve yükleme durumunu sorgulamak için devam ettirilebilir oturum URI'sini kullanın. Devam ettirilebilir bir oturum URI'sinin 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ükleme

Devam ettirilebilir oturumla dosya yüklemenin iki yolu vardır:

  • İçeriği tek bir istekle yükleme: Dosya tek bir istekle yüklenebiliyorsa, tek bir istek için sabit bir zaman sınırı yoksa veya yükleme ilerleme 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çaya ayırarak yükleyin: Tek bir istekte aktarılan veri miktarını azaltmanız gerekiyorsa bu yaklaşımı kullanın. Belirli App Engine istek sınıflarında olduğu gibi, bireysel istekler için sabit bir süre sınırı olduğunda 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ıdır.

HTTP - tekli istek

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

HTTP - birden fazla istek

  1. Devam ettirilebilir oturum URI'si 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'lık (256 x 1024 bayt) çoklu parçalar oluşturun. Yüklemenin verimli olması için parça boyutunu mümkün olduğunca büyük tutun.

  3. Aşağıdaki HTTP üst bilgilerini ekleyin:

    • Content-Length. Geçerli parçadaki bayt sayısına ayarlanır.
    • Content-Range. Dosyadaki hangi baytları yüklediğinizi gösterecek şekilde ayarlayın. Örneğin, Content-Range: bytes 0-524287/2000000, 2.000.000 baytlık bir dosyanın ilk 524.288 baytını (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 yüklemeyi devam ettirme bölümündeki prosedürü uygulayın.

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

Dosya yüklemenin 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 yüklemeyi devam ettirme

Yükleme isteği yanıt almadan 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'sine boş bir PUT isteği oluşturun.

  2. Dosyadaki mevcut konumun bilinmediğini belirtmek için bir Content-Range üstbilgisi ekleyin. Örneğin, toplam dosya uzunluğunuz 2.000.000 bayt ise Content-Range değerini */2000000 olarak ayarlayın. Dosyanın tam boyutunu bilmiyorsanız Content-Range değerini */* olarak ayarlayın.

  3. İsteği gönderin.

  4. Yanıtı işleme:

    • 200 OK veya 201 Created yanıtı, yüklemenin tamamlandığını ve başka bir işlem yapılmasına 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 süresinin dolduğunu ve yüklemenin baştan başlatılması gerektiğini gösterir.
  5. 308 Resume Incomplete yanıtı aldıysanız sunucunun hangi baytları aldığını belirlemek için yanıtın Range üst bilgisini işleyin. Yanıtın Range başlığı yoksa hiç bayt alınmamıştır. Örneğin, bytes=0-42 değerine sahip bir Range başlığı, dosyanın ilk 43 baytının alındığını ve yüklenecek bir sonraki parçanın 44. baytla başlayacağını gösterir.

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

Medya yükleme hatalarını giderme

Medya yüklerken hataları işlemek 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ı ele alma hakkında daha fazla bilgi için 500, 502, 503, 504 hataları başlıklı makaleyi inceleyin.
  • 403 rate limit hataları için yüklemeyi tekrar deneyin. 403 rate limit hatalarını ele alma hakkında daha fazla bilgi için 403 hatası:rateLimitExceeded başlıklı makaleyi inceleyin.
  • Devam ettirilebilir yükleme sırasında 4xx hataları (403 dahil) oluşursa yüklemeyi yeniden başlatın. Bu hatalar, yükleme oturumunun süresinin dolduğunu 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 işlem yapılmadığında dolar.

Google Dokümanlar'a aktarma türleri

Drive'da oluşturduğunuz dosyaları Google Dokümanlar veya E-Tablolar gibi Google Workspace dosya türlerine dönüştürebilirsiniz. Örneğin, favori kelime işlemcinizdeki bir dokümanı, özelliklerinden yararlanmak için Dokümanlar'a dönüştürmek 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, bir 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({
      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;
        }
    }
}

Dönüşümün kullanılıp kullanılamayacağını görmek için dosyayı oluşturmadan önce about kaynağının importFormats dizisini kontrol edin. Desteklenen dönüşümler bu dizi içinde dinamik olarak kullanılabilir. Sık kullanılan bazı içe aktarma biçimleri şunlardır:

NeredenAlıcı
Microsoft Word, OpenDocument Metin, 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 medya yükleyip Dokümanlar, E-Tablolar veya Slaytlar dosyasına dönüştürdüğünüzde, dokümanın tüm içeriği değiştirilir.

Drive, bir resmi Dokümanlar dosyasına dönüştürdüğünüzde 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 artırabilirsiniz. Ayıklanan metin, yerleştirilmiş resmin yanında dokümanda 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ızı sağlar. Yükleme ve dosya oluşturma isteklerinde bu önceden oluşturulmuş kimlikler kullanılabilir. Dosya meta verilerinde id alanını ayarlayın.

Önceden oluşturulmuş kimlikler oluşturmak için oluşturulacak kimlik sayısını belirterek files.generateIds işlevini çağırı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 yeniden denemelerde HTTP 409 hatası döndürülür ve yinelenen dosya oluşturulmaz.

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ızda 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 dokümanları arama için otomatik olarak dizine ekler. Uygulamanız başka dosya türleri (ör. çizimler, videolar ve kısayollar) kaydediyorsa dosyanın contentHints.indexableText alanına dizine eklenebilir metin ekleyerek keşfedilebilirliği artırabilirsiniz.

Dizine eklenebilir metin hakkında daha fazla bilgi edinmek için Dosya meta verilerini yönetme bölümüne bakın.