داده های فایل را آپلود کنید

Google Drive API به شما امکان می‌دهد هنگام ایجاد یا به‌روزرسانی File داده‌های فایل را آپلود کنید. برای اطلاعات در مورد نحوه ایجاد یک فایل فقط فراداده، مانند یک پوشه، به ایجاد فایل‌های فقط فراداده مراجعه کنید.

سه نوع آپلود وجود دارد که می توانید انجام دهید:

  • آپلود ساده ( uploadType=media ) : از این نوع آپلود برای انتقال یک فایل رسانه ای کوچک (5 مگابایت یا کمتر) بدون ارائه ابرداده استفاده کنید. برای انجام یک آپلود ساده، به انجام آپلود ساده مراجعه کنید.

  • آپلود چند قسمتی ( uploadType=multipart ) : "از این نوع آپلود برای انتقال یک فایل کوچک (5 مگابایت یا کمتر) به همراه ابرداده که فایل را توصیف می کند، در یک درخواست استفاده کنید. برای انجام یک آپلود چند قسمتی، به انجام آپلود چند قسمتی مراجعه کنید.

  • بارگذاری مجدد ( uploadType=resumable ) : از این نوع آپلود برای فایل های بزرگ (بیشتر از 5 مگابایت) و زمانی که احتمال قطع شدن شبکه وجود دارد، مانند هنگام ایجاد یک فایل از یک برنامه تلفن همراه، استفاده کنید. آپلودهای قابل ازسرگیری نیز انتخاب خوبی برای اکثر برنامه‌ها هستند زیرا برای فایل‌های کوچک با حداقل هزینه یک درخواست HTTP اضافی در هر بارگذاری کار می‌کنند. برای انجام آپلود قابل ازسرگیری، به انجام آپلود قابل ازسرگیری مراجعه کنید.

کتابخانه های سرویس گیرنده Google API حداقل یکی از این نوع آپلودها را اجرا می کنند. برای جزئیات بیشتر در مورد نحوه استفاده از هر یک از انواع، به مستندات کتابخانه مشتری مراجعه کنید.

از PATCH در مقابل PUT استفاده کنید

به عنوان یک تجدید، فعل HTTP PATCH از به روز رسانی جزئی منبع فایل پشتیبانی می کند در حالی که فعل HTTP PUT از جایگزینی کامل منبع پشتیبانی می کند. توجه داشته باشید که PUT می‌تواند هنگام افزودن یک فیلد جدید به یک منبع موجود، تغییرات قطعی ایجاد کند.

هنگام آپلود یک منبع فایل، از دستورالعمل های زیر استفاده کنید:

  • از فعل HTTP مستند شده در مرجع API برای درخواست اولیه یک آپلود قابل ازسرگیری یا برای تنها درخواست یک آپلود ساده یا چند بخشی استفاده کنید.
  • پس از شروع درخواست، از PUT برای همه درخواست‌های بعدی برای آپلود قابل ازسرگیری استفاده کنید. این درخواست ها صرف نظر از روشی که فراخوانی می شود، محتوا را بارگذاری می کنند.

یک آپلود ساده انجام دهید

برای انجام یک آپلود ساده، از روش files.create با uploadType=media استفاده کنید.

موارد زیر نحوه انجام یک آپلود ساده را نشان می دهد:

HTTP

  1. یک درخواست POST به URI /upload متد با پارامتر query uploadType=media ایجاد کنید:

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

  2. داده های فایل را به بدنه درخواست اضافه کنید.

  3. این هدرهای HTTP را اضافه کنید:

    • Content-Type . روی نوع رسانه MIME شیء در حال آپلود تنظیم کنید.
    • Content-Length . تعداد بایت هایی را که آپلود می کنید تنظیم کنید. اگر از رمزگذاری انتقال تکه‌ای استفاده می‌کنید، این هدر لازم نیست.
  4. درخواست را ارسال کنید. در صورت موفقیت آمیز بودن درخواست، سرور کد وضعیت HTTP 200 OK را همراه با فراداده فایل برمی گرداند. {HTTP}

هنگامی که یک آپلود ساده انجام می دهید، ابرداده اصلی ایجاد می شود و برخی از ویژگی ها از فایل استنتاج می شوند، مانند نوع MIME یا modifiedTime . در مواردی که فایل های کوچکی دارید و ابرداده فایل مهم نیست، می توانید از یک آپلود ساده استفاده کنید.

یک بارگذاری چند قسمتی انجام دهید

درخواست آپلود چند قسمتی به شما امکان می‌دهد ابرداده و داده را در همان درخواست آپلود کنید. اگر داده‌هایی که ارسال می‌کنید به اندازه‌ای کوچک هستند که در صورت عدم اتصال، به طور کامل دوباره آپلود شوند، از این گزینه استفاده کنید.

برای انجام آپلود چند قسمتی، از روش files.create با uploadType=multipart استفاده کنید.

موارد زیر نحوه انجام آپلود چند قسمتی را نشان می دهد:

جاوا

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

پایتون

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

}

دات نت

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. با پارامتر query uploadType=multipart یک درخواست POST به /upload URI متد ایجاد کنید:

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

  2. بدنه درخواست را ایجاد کنید. بدنه را با توجه به نوع محتوای چندبخشی/مرتبط با RFC 2387 فرمت کنید که شامل دو بخش است:

    • فراداده. ابرداده باید ابتدا باشد و باید دارای یک سرصفحه Content-Type باشد که روی application/json; charset=UTF-8 . متادیتای فایل را با فرمت JSON اضافه کنید.
    • رسانه ها رسانه باید در رتبه دوم قرار گیرد و باید یک هدر Content-Type از هر نوع MIME داشته باشد. داده های فایل را به بخش رسانه اضافه کنید.

    هر قسمت را با یک رشته مرزی که قبل از آن دو خط فاصله وجود دارد، مشخص کنید. علاوه بر این، دو خط فاصله بعد از رشته مرزی نهایی اضافه کنید.

  3. این هدرهای سطح بالای HTTP را اضافه کنید:

    • Content-Type . روی multipart/related تنظیم کنید و رشته مرزی را که برای شناسایی بخش‌های مختلف درخواست استفاده می‌کنید، اضافه کنید. به عنوان مثال: Content-Type: multipart/related; boundary=foo_bar_baz
    • Content-Length . تعداد کل بایت ها را در بدنه درخواست تنظیم کنید.
  4. درخواست را ارسال کنید.

فقط برای ایجاد یا به‌روزرسانی بخش فوق‌داده، بدون داده‌های مرتبط، یک درخواست POST یا PATCH به نقطه پایانی منبع استاندارد ارسال کنید: https://www.googleapis.com/drive/v3/files اگر درخواست موفق شد، سرور درخواست را برمی‌گرداند. کد وضعیت HTTP 200 OK به همراه ابرداده فایل.

هنگام ایجاد فایل، آنها باید پسوند فایل را در قسمت name فایل مشخص کنند. به عنوان مثال، هنگام ایجاد یک فایل JPEG عکس، ممکن است چیزی مانند "name": "photo.jpg" در ابرداده. تماس‌های بعدی به files.get ویژگی fileExtension فقط خواندنی را برمی‌گرداند که حاوی پسوندی است که ابتدا در قسمت name مشخص شده است.

یک بارگذاری مجدد انجام دهید

آپلود قابل ازسرگیری به شما این امکان را می دهد که پس از یک شکست ارتباطی که جریان داده ها را قطع می کند، عملیات آپلود را از سر بگیرید. از آنجایی که مجبور نیستید از ابتدا آپلود فایل های بزرگ را مجددا راه اندازی کنید، در صورت بروز مشکل در شبکه، آپلودهای قابل ازسرگیری نیز می توانند مصرف پهنای باند شما را کاهش دهند.

آپلودهای قابل ازسرگیری زمانی مفید هستند که اندازه فایل‌های شما ممکن است بسیار متفاوت باشد یا زمانی که محدودیت زمانی ثابتی برای درخواست‌ها وجود دارد (مانند وظایف پس‌زمینه سیستم عامل تلفن همراه و درخواست‌های خاص App Engine). همچنین می‌توانید برای موقعیت‌هایی که می‌خواهید نوار پیشرفت آپلود را نشان دهید، از آپلودهای قابل ازسرگیری استفاده کنید.

یک آپلود مجدد شامل چندین مرحله سطح بالا است:

  1. درخواست اولیه را ارسال کنید و URI جلسه قابل ازسرگیری را بازیابی کنید.
  2. داده ها را آپلود کنید و وضعیت آپلود را نظارت کنید.
  3. (اختیاری) اگر آپلود مختل شد، بارگذاری را از سر بگیرید.

درخواست اولیه را ارسال کنید

برای شروع آپلود مجدد، از روش files.create با uploadType=resumable استفاده کنید.

HTTP

  1. یک درخواست POST به URI /upload متد با پارامتر query uploadType=resumable ایجاد کنید:

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

    اگر درخواست شروع با موفقیت انجام شود، پاسخ شامل یک کد وضعیت HTTP 200 OK است. علاوه بر این، شامل یک سرصفحه Location است که URI جلسه قابل ازسرگیری را مشخص می کند:

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

    URI جلسه قابل ازسرگیری را ذخیره کنید تا بتوانید داده های فایل را آپلود کنید و وضعیت آپلود را جویا شوید. URI جلسه قابل ازسرگیری پس از یک هفته منقضی می شود.

  2. اگر متادیتا برای فایل دارید، فراداده را با فرمت JSON به بدنه درخواست اضافه کنید. در غیر این صورت متن درخواست را خالی بگذارید.

  3. این هدرهای HTTP را اضافه کنید:

    • X-Upload-Content-Type . اختیاری. نوع MIME داده های فایل را تنظیم کنید که در درخواست های بعدی منتقل می شود. اگر نوع MIME داده در فراداده یا از طریق این هدر مشخص نشده باشد، شی به عنوان application/octet-stream.
    • X-Upload-Content-Length . اختیاری. تعداد بایت های داده فایل را تنظیم کنید که در درخواست های بعدی منتقل می شود.
    • Content-Type . اگر متادیتا برای فایل دارید، الزامی است. روی application/json; charset=UTF-8 .
    • Content-Length . لازم است مگر اینکه از رمزگذاری انتقال تکه تکه استفاده کنید. تعداد بایت های موجود در بدنه این درخواست اولیه را تنظیم کنید.
  4. درخواست را ارسال کنید. اگر درخواست شروع جلسه با موفقیت انجام شود، پاسخ شامل یک کد وضعیت 200 OK HTTP است. علاوه بر این، پاسخ شامل یک سرصفحه Location است که URI جلسه قابل ازسرگیری را مشخص می کند. برای آپلود داده های فایل و پرس و جو از وضعیت آپلود از URI جلسه قابل تجدید استفاده کنید. URI جلسه قابل ازسرگیری پس از یک هفته منقضی می شود.

  5. URL جلسه قابل ازسرگیری را کپی و ذخیره کنید.

  6. به آپلود محتوا ادامه دهید.

محتوا را آپلود کنید

دو راه برای آپلود یک فایل با یک جلسه مجدد وجود دارد:

  • آپلود محتوا در یک درخواست : از این روش زمانی استفاده کنید که فایل را می توان در یک درخواست آپلود کرد، اگر محدودیت زمانی ثابتی برای هر درخواست واحد وجود ندارد یا نیازی به نمایش نشانگر پیشرفت آپلود ندارید. این رویکرد بهترین است زیرا به درخواست های کمتری نیاز دارد و عملکرد بهتری را به همراه دارد.
  • محتوا را در چند تکه آپلود کنید : اگر باید مقدار داده های منتقل شده در هر درخواست را کاهش دهید، از این روش استفاده کنید. ممکن است لازم باشد زمانی که محدودیت زمانی مشخصی برای درخواست‌های فردی وجود دارد، انتقال داده را کاهش دهید، همانطور که می‌تواند در مورد کلاس‌های خاصی از درخواست‌های App Engine وجود داشته باشد. اگر باید یک نشانگر سفارشی برای نشان دادن پیشرفت آپلود ارائه دهید، این رویکرد نیز مفید است.

HTTP - درخواست تک

  1. یک درخواست PUT به URI جلسه قابل ازسرگیری ایجاد کنید.
  2. داده های فایل را به بدنه درخواست اضافه کنید.
  3. یک هدر HTTP با طول محتوا اضافه کنید، روی تعداد بایت های فایل تنظیم کنید.
  4. درخواست را ارسال کنید. اگر درخواست آپلود قطع شد، یا اگر یک پاسخ 5xx دریافت کردید، رویه را در Resume an interrupted upload دنبال کنید.

HTTP - درخواست های متعدد

  1. یک درخواست PUT به URI جلسه قابل ازسرگیری ایجاد کنید.

  2. داده های قطعه را به بدنه درخواست اضافه کنید. تکه هایی را در مضرب 256 کیلوبایت (256 x 1024 بایت) در اندازه ایجاد کنید، به جز تکه نهایی که آپلود را کامل می کند. اندازه قطعه را تا حد امکان بزرگ نگه دارید تا آپلود کارآمد باشد.

  3. این هدرهای HTTP را اضافه کنید:

    • Content-Length . تعداد بایت ها را در قطعه فعلی تنظیم کنید.
    • Content-Range . تنظیم کنید تا نشان دهد کدام بایت ها در فایلی که آپلود می کنید. به عنوان مثال، Content-Range: bytes 0-524287/2000000 نشان می دهد که شما اولین 524288 بایت (256 x 1024 x 2) را در یک فایل 2000000 بایت آپلود می کنید.
  4. درخواست را ارسال کنید و پاسخ را پردازش کنید. اگر درخواست آپلود قطع شد، یا اگر یک پاسخ 5xx دریافت کردید، رویه را در Resume an interrupted upload دنبال کنید.

  5. مراحل 1 تا 4 را برای هر تکه ای که در فایل باقی می ماند تکرار کنید. از هدر Range در پاسخ برای تعیین اینکه قسمت بعدی را از کجا شروع کنید استفاده کنید. فرض نکنید که سرور تمام بایت های ارسال شده در درخواست قبلی را دریافت کرده است.

هنگامی که کل آپلود فایل کامل شد، یک پاسخ 200 OK یا 201 Created را به همراه هر ابرداده مرتبط با منبع دریافت می کنید.

از سرگیری آپلود قطع شده

اگر درخواست آپلود قبل از پاسخ خاتمه یافت، یا اگر پاسخ 503 Service Unavailable را دریافت کردید، باید آپلود قطع شده را از سر بگیرید.

HTTP

  1. برای درخواست وضعیت آپلود، یک درخواست PUT خالی به URI جلسه قابل ازسرگیری ایجاد کنید.

  2. یک هدر Content-Range اضافه کنید تا مشخص کنید موقعیت فعلی فایل ناشناخته است. برای مثال، Content-Range روی */2000000 تنظیم کنید اگر طول کل فایل شما 2000000 بایت باشد. اگر اندازه کامل فایل را نمی دانید، Content-Range روی */* تنظیم کنید.

  3. درخواست را ارسال کنید.

  4. پردازش پاسخ:

    • پاسخ 200 OK یا 201 Created نشان می دهد که آپلود کامل شده است و هیچ اقدام دیگری لازم نیست.
    • پاسخ 308 Resume Incomplete نشان می دهد که باید به آپلود فایل ادامه دهید.
    • پاسخ 404 Not Found نشان می دهد که جلسه آپلود منقضی شده است و آپلود باید از ابتدا دوباره شروع شود.
  5. اگر یک پاسخ 308 Resume Incomplete دریافت کردید، هدر Range پاسخ را پردازش کنید تا مشخص شود سرور کدام بایت را دریافت کرده است. اگر پاسخ هدر Range نداشته باشد، هیچ بایتی دریافت نشده است. به عنوان مثال، هدر Range از bytes=0-42 نشان می دهد که 43 بایت اول فایل دریافت شده است و قسمت بعدی برای آپلود با بایت 44 شروع می شود.

  6. اکنون که می دانید کجا آپلود را از سر بگیرید، به آپلود فایل با بایت بعدی ادامه دهید. یک هدر Content-Range اضافه کنید تا مشخص کنید کدام قسمت از فایل را ارسال می کنید. به عنوان مثال، Content-Range: bytes 43-1999999 نشان می دهد که شما بایت های 44 تا 2000000 را ارسال می کنید.

خطاهای آپلود رسانه را مدیریت کنید

هنگامی که رسانه را آپلود می کنید، این بهترین شیوه ها را برای رسیدگی به خطاها دنبال کنید:

  • برای خطاهای 5xx ، آپلودهایی را که به دلیل قطع اتصال ناموفق هستند، از سر بگیرید یا دوباره امتحان کنید. برای اطلاعات بیشتر در مورد رسیدگی به خطاهای 5xx ، به خطاهای 500، 502، 503، 504 مراجعه کنید.
  • برای خطاهای 403 rate limit ، بارگذاری را دوباره امتحان کنید. برای اطلاعات بیشتر در مورد رسیدگی به خطاهای 403 rate limit ، به خطای 403 مراجعه کنید: rateLimitExceeded .
  • برای هر گونه خطای 4xx (از جمله 403 ) در حین بارگذاری مجدد، بارگذاری را مجدداً راه اندازی کنید. این خطاها نشان می دهد که جلسه آپلود منقضی شده است و باید با درخواست URI جلسه جدید مجدداً راه اندازی شود. جلسات آپلود نیز پس از یک هفته عدم فعالیت منقضی می شود.

وارد کردن به انواع Google Docs

وقتی فایلی را در Drive ایجاد می‌کنید، ممکن است بخواهید فایل را به یک نوع فایل Google Workspace، مانند Google Docs یا Sheets تبدیل کنید. به عنوان مثال، شاید بخواهید یک سند را از پردازشگر کلمه مورد علاقه خود به یک Docs تبدیل کنید تا از ویژگی های آن استفاده کنید.

برای تبدیل یک فایل به یک نوع فایل Google Workspace خاص، هنگام ایجاد فایل، mimeType Google Workspace را مشخص کنید.

در زیر نحوه تبدیل یک فایل CSV به صفحه Google Workspace را نشان می دهد:

جاوا

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

پایتون

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

}

دات نت

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

برای اینکه ببینید آیا یک تبدیل در دسترس است یا نه، قبل از ایجاد فایل، آرایه importFormats منبع about را بررسی کنید. تبدیل های پشتیبانی شده به صورت پویا در این آرایه در دسترس هستند. برخی از فرمت های رایج واردات عبارتند از:

از به
Microsoft Word، OpenDocument Text، HTML، RTF، متن ساده Google Docs
Microsoft Excel، صفحه گسترده OpenDocument، CSV، TSV، متن ساده Google Sheets
مایکروسافت پاورپوینت، ارائه OpenDocument اسلایدهای گوگل
JPEG، PNG، GIF، BMP، PDF Google Docs (تصویر را در یک سند جاسازی می کند)
متن ساده (نوع MIME خاص)، JSON اسکریپت Google Apps

هنگامی که در طول درخواست update ، رسانه را به فایل Docs، Sheets یا Slides آپلود و تبدیل می‌کنید، محتوای کامل سند جایگزین می‌شود.

وقتی تصویری را به Docs تبدیل می‌کنید، Drive از تشخیص کاراکتر نوری (OCR) برای تبدیل تصویر به متن استفاده می‌کند. می توانید کیفیت الگوریتم OCR را با تعیین کد زبان BCP 47 قابل اجرا در پارامتر ocrLanguage بهبود بخشید. متن استخراج شده در Doc در کنار تصویر تعبیه شده ظاهر می شود.

از یک شناسه از پیش تولید شده برای آپلود فایل ها استفاده کنید

Drive API به شما امکان می دهد فهرستی از شناسه های فایل از پیش تولید شده را که برای آپلود و ایجاد منابع استفاده می شود، بازیابی کنید. درخواست های آپلود و ایجاد فایل می توانند از این شناسه های از پیش تولید شده استفاده کنند. فیلد id را در فراداده فایل تنظیم کنید.

برای ایجاد شناسه‌های از پیش تولید شده، با تعداد شناسه‌هایی که باید ایجاد کنید، با files.generateIds تماس بگیرید.

اگر خطای سرور نامشخص یا مهلت زمانی وجود داشت، می‌توانید با خیال راحت بارگذاری‌ها را با شناسه‌های از پیش تولید شده دوباره امتحان کنید. اگر فایل با موفقیت ایجاد شد، تکرارهای بعدی خطای HTTP 409 را برمی‌گرداند و فایل‌های تکراری ایجاد نمی‌کنند.

متن قابل نمایه سازی را برای انواع فایل های ناشناخته تعریف کنید

کاربران می توانند از رابط کاربری Drive برای یافتن محتوای سند استفاده کنند. همچنین می توانید از files.list و قسمت fullText برای جستجوی محتوای برنامه خود استفاده کنید. برای اطلاعات بیشتر، به جستجوی فایل‌ها و پوشه‌ها مراجعه کنید.

Drive به‌طور خودکار اسناد را برای جستجو فهرست‌بندی می‌کند که نوع فایل را تشخیص می‌دهد، از جمله اسناد متنی، فایل‌های PDF، تصاویر دارای متن، و انواع رایج دیگر. اگر برنامه شما انواع دیگری از فایل‌ها را ذخیره می‌کند (مانند نقاشی‌ها، ویدیوها و میانبرها)، می‌توانید با ارائه متن قابل نمایه‌سازی در قسمت contentHints.indexableText فایل، قابلیت شناسایی را بهبود ببخشید.

برای اطلاعات بیشتر درباره متن قابل نمایه سازی، به مدیریت فراداده فایل مراجعه کنید.