ادغام با منوِ زمینه‌ای «باز کردن با» در میانای کاربر Drive

وقتی کاربر فایلی را انتخاب می‌کند و روی گزینه منو «باز کردن با» در Drive UI کلیک می‌کند، Drive کاربر را به «نشانی وب باز کردن» آن برنامه که در پیکربندی ادغام Drive UI تعریف شده است هدایت می‌کند.

اگر هنگام پیکربندی ادغام Drive UI، چارگوش «وارد کردن» را علامت زده باشید، کاربر می‌تواند ترکیبی از فایل‌های مختص برنامه و Google Workspace را برای باز کردن انتخاب کند. وقتی یکپارچه‌سازی Drive UI را پیکربندی می‌کنید، فایل‌های مختص برنامه در فیلدهای «انواع MIME پیش‌فرض» و «پسوندهای فایل پیش‌فرض» تعریف می‌شوند، درحالی‌که فایل‌های Google Workspace در فیلدهای «انواع MIME ثانویه» و «پسوندهای فایل ثانویه» تعریف می‌شوند.

برای هر فایلی که کاربر می‌خواهد باز کند، Drive نوع MIME را با انواع MIME پیش‌فرض و ثانویه تعریف‌شده شما بررسی می‌کند:

  • برای انواع MIME تعریف‌شده در فیلد «انواع MIME پیش‌فرض»، شناسه فایل به برنامه‌تان ارسال می‌شود. برای کسب اطلاعات درباره نحوه مدیریت فایل‌های مختص برنامه، مدیریت نشانی وب باز برای اسناد مختص برنامه را ببینید.

  • برای انواع MIME تعریف‌شده در فیلد «انواع MIME ثانویه»، رابط کاربری Drive کادر گفتگویی نمایش می‌دهد که از کاربر می‌پرسد فایل Google Workspace به چه نوع فایلی تبدیل شود. برای مثال، اگر فایل «سندنگار Google» را در واسط کاربر Drive انتخاب کنید و فیلد «نوع MIME ثانویه» نشان دهد که برنامه شما از text/plain یا application/pdf پشتیبانی می‌کند، واسط کاربر Drive از کاربر می‌پرسد که آیا می‌خواهد به «نوشتار ساده» یا PDF تبدیل کند یا نه.

    برای اطلاعات درباره نحوه مدیریت فایل‌های Google Workspace، مدیریت نشانی وب باز برای اسناد Google Workspace را ببینید. برای مشاهده فهرست اسناد Google Workspace و قالب‌های تبدیل نوع MIME، صادر کردن انواع MIME برای اسناد Google Workspace را ببینید.

مدیریت کردن «باز کردن نشانی وب» برای اسناد مختص برنامه

همان‌طور که در پیکربندی ادغام رابط کاربری Drive ذکر شده است، برنامه شما متغیرهای الگو را با اطلاعاتی برای برنامه شما دریافت می‌کند تا فایل را باز کند. برنامه شما مجموعه‌ای پیش‌فرض از متغیرهای الگو را در پارامتر state دریافت می‌کند. اطلاعات پیش‌فرض state برای «باز کردن نشانی وب» مختص برنامه عبارت است از:

{
  "ids": ["ID"],
  "resourceKeys":{"RESOURCE_KEYS":"RESOURCE_KEYS"},
  "action":"open",
  "userId":"USER_ID"
}

این خروجی شامل مقادیر زیر است:

  • ‫ID: شناسه پوشه اصلی.
  • RESOURCE_KEYS: واژه‌نامه JSON از شناسه‌های فایل که به کلیدهای منبع مربوطه نگاشت شده‌اند.
  • open: کنشی که درحال انجام است. هنگام استفاده از نشانی وب باز، مقدار open است.
  • USER_ID: شناسه نمایه که کاربر را به‌طور منحصربه‌فرد شناسایی می‌کند.

برنامه‌تان باید با دنبال کردن این مراحل به این درخواست پاسخ دهد:

  1. تأیید کنید که فیلد action دارای مقدار open است و فیلد ids وجود دارد.
  2. از مقدار userId برای ایجاد جلسه جدید برای کاربر استفاده کنید. برای اطلاعات بیشتر درباره کاربران واردشده به سیستم، به کاربران و رویدادهای جدید مراجعه کنید.
  3. از روش files.get برای بررسی اجازه‌ها، واکشی فراداده فایل، و بارگیری محتوای فایل بااستفاده از مقادیر ID استفاده کنید.
  4. اگر resourceKeys در درخواست تنظیم شده است، سرایند درخواست X-Goog-Drive-Resource-Keys را تنظیم کنید. برای اطلاعات بیشتر درباره کلیدهای منبع، به دسترسی به فایل‌های هم‌رسانی‌شده با پیوند بااستفاده از کلیدهای منبع مراجعه کنید.

پارامتر state به‌صورت URL-encoded است، بنابراین برنامه‌تان باید نویسه‌های گریز را مدیریت کند و آن را به‌عنوان JSON تجزیه کند.

مدیریت کردن نشانی وب باز برای اسناد Google Workspace

همان‌طور که در پیکربندی ادغام رابط کاربری Drive ذکر شد، برنامه شما مجموعه‌ای پیش‌فرض از متغیرهای الگو را در پارامتر state دریافت می‌کند. اطلاعات پیش‌فرض state برای «نشانی وب باز» Google Workspace عبارت است از:

{
  "exportIds": ["ID"],
  "resourceKeys":{"RESOURCE_KEYS":"RESOURCE_KEYS"},
  "action":"open",
  "userId":"USER_ID"
}

این خروجی شامل مقادیر زیر است:

  • EXPORT_ID: فهرست جداشده با کاما از شناسه‌های فایل که صادر می‌شوند. فقط هنگام باز کردن فایل‌های Google Workspace استفاده می‌شود.
  • RESOURCE_KEYS: واژه‌نامه JSON از شناسه‌های فایل که به کلیدهای منبع مربوطه نگاشت شده‌اند.
  • open: کنشی که درحال انجام است. هنگام استفاده از نشانی وب باز، مقدار open است.
  • ‫USER_ID: شناسه نمایه که کاربر را شناسایی می‌کند.

برنامه‌تان باید با دنبال کردن این مراحل به این درخواست پاسخ دهد:

  1. با شناسایی مقدار open در فیلد state و وجود فیلد exportIds، تأیید کنید که این درخواست برای باز کردن فایل است.

  2. از روش files.get برای بررسی اجازه‌ها، واکشی فراداده فایل، و تعیین نوع MIME بااستفاده از مقادیر EXPORT_ID استفاده کنید.

  3. محتوای فایل را بااستفاده از روش files.export تبدیل کنید. نمونه کد زیر نشان می‌دهد که چگونه یک سند Google Workspace را به نوع MIME درخواستی صادر کنید.

  4. اگر resourceKey در درخواست تنظیم شده است، سرایند درخواست X-Goog-Drive-Resource-Keys را تنظیم کنید. برای اطلاعات بیشتر درباره کلیدهای منبع، به دسترسی به فایل‌های هم‌رسانی‌شده با پیوند بااستفاده از کلیدهای منبع مراجعه کنید.

    جاوا

    drive/snippets/drive_v3/src/main/java/ExportPdf.java
    import com.google.api.client.googleapis.json.GoogleJsonResponseException;
    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.auth.http.HttpCredentialsAdapter;
    import com.google.auth.oauth2.GoogleCredentials;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Arrays;
    
    /* Class to demonstrate use-case of drive's export pdf. */
    public class ExportPdf {
    
      /**
       * Download a Document file in PDF format.
       *
       * @param realFileId file ID of any workspace document format file.
       * @return byte array stream if successful, {@code null} otherwise.
       * @throws IOException if service account credentials file not found.
       */
      public static ByteArrayOutputStream exportPdf(String realFileId) 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();
    
        OutputStream outputStream = new ByteArrayOutputStream();
        try {
          service.files().export(realFileId, "application/pdf")
              .executeMediaAndDownloadTo(outputStream);
    
          return (ByteArrayOutputStream) outputStream;
        } catch (GoogleJsonResponseException e) {
          // TODO(developer) - handle error appropriately
          System.err.println("Unable to export file: " + e.getDetails());
          throw e;
        }
      }
    }

    Python

    drive/snippets/drive-v3/file_snippet/export_pdf.py
    import io
    
    import google.auth
    from googleapiclient.discovery import build
    from googleapiclient.errors import HttpError
    from googleapiclient.http import MediaIoBaseDownload
    
    
    def export_pdf(real_file_id):
      """Download a Document file in PDF format.
      Args:
          real_file_id : file ID of any workspace document format file
      Returns : IO object with location
    
      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_id = real_file_id
    
        # pylint: disable=maybe-no-member
        request = service.files().export_media(
            fileId=file_id, mimeType="application/pdf"
        )
        file = io.BytesIO()
        downloader = MediaIoBaseDownload(file, request)
        done = False
        while done is False:
          status, done = downloader.next_chunk()
          print(f"Download {int(status.progress() * 100)}.")
    
      except HttpError as error:
        print(f"An error occurred: {error}")
        file = None
    
      return file.getvalue()
    
    
    if __name__ == "__main__":
      export_pdf(real_file_id="1zbp8wAyuImX91Jt9mI-CAX_1TqkBLDEDcr2WeXBbKUY")

    Node.js

    drive/snippets/drive_v3/file_snippets/export_pdf.js
    import {GoogleAuth} from 'google-auth-library';
    import {google} from 'googleapis';
    
    /**
     * Exports a Google Doc as a PDF.
     * @param {string} fileId The ID of the file to export.
     * @return {Promise<number>} The status of the export request.
     */
    async function exportPdf(fileId) {
      // Authenticate with Google and get an authorized client.
      // TODO (developer): Use an appropriate auth mechanism for your app.
      const auth = new GoogleAuth({
        scopes: 'https://www.googleapis.com/auth/drive',
      });
    
      // Create a new Drive API client (v3).
      const service = google.drive({version: 'v3', auth});
    
      // Export the file as a PDF.
      const result = await service.files.export({
        fileId,
        mimeType: 'application/pdf',
      });
    
      // Print the status of the export.
      console.log(result.status);
      return result.status;
    }

    PHP

    drive/snippets/drive_v3/src/DriveExportPdf.php
    <?php
    use Google\Client;
    use Google\Service\Drive;
    function exportPdf()
    {
        try {
            $client = new Client();
            $client->useApplicationDefaultCredentials();
            $client->addScope(Drive::DRIVE);
            $driveService = new Drive($client);
            $realFileId = readline("Enter File Id: ");
            $fileId = '1ZdR3L3qP4Bkq8noWLJHSr_iBau0DNT4Kli4SxNc2YEo';
            $fileId = $realFileId;
            $response = $driveService->files->export($fileId, 'application/pdf', array(
                'alt' => 'media'));
            $content = $response->getBody()->getContents();
            return $content;
    
        }  catch(Exception $e) {
             echo "Error Message: ".$e;
        }
    
    }

فایل‌های تبدیل‌شده را به‌صورت فقط خواندنی نمایش دهید یا کادر گفتگویی ارائه دهید که به کاربر اجازه دهد فایل را به‌عنوان نوع فایل جدید ذخیره کند.

پارامتر state به‌صورت URL-encoded است، بنابراین برنامه‌تان باید نویسه‌های گریز را مدیریت کند و آن را به‌عنوان JSON تجزیه کند.

کاربران و رویدادهای جدید

برنامه‌های Drive باید همه رویدادهای «باز کردن با» را به‌عنوان ورود به سیستم احتمالی درنظر بگیرند. برخی‌از کاربران ممکن است چند حساب داشته باشند، بنابراین شناسه کاربر در پارامتر state ممکن است با جلسه فعلی مطابقت نداشته باشد. اگر شناسه کاربر در پارامتر state با جلسه فعلی مطابقت ندارد، جلسه فعلی را برای برنامه‌تان به‌پایان برسانید و به‌عنوان کاربر درخواست‌شده به سیستم وارد شوید.

علاوه‌بر باز کردن برنامه از میانای کاربر Google Drive، برنامه‌ها می‌توانند انتخاب‌گر فایل را برای انتخاب محتوا از داخل برنامه نمایش دهند. برای اطلاعات بیشتر، انتخاب‌گر Google را ببینید.