ادغام با رابط کاربری Drive "باز کردن با" منوی زمینه

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

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

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

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

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

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

مدیریت یک URL باز برای اسناد مخصوص برنامه

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

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

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

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

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

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

پارامتر state توسط URL کدگذاری شده است، بنابراین برنامه شما باید کاراکترهای escape را مدیریت کرده و آن را به صورت JSON تجزیه کند.

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

همانطور که در پیکربندی یکپارچه‌سازی رابط کاربری درایو ذکر شد، برنامه شما مجموعه‌ای پیش‌فرض از متغیرهای قالب را در یک پارامتر state دریافت می‌کند. اطلاعات state پیش‌فرض برای یک URL باز Google Workspace به شرح زیر است:

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

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

  • EXPORT_ID : فهرستی از شناسه‌های فایل‌های خروجی که با کاما از هم جدا شده‌اند. فقط هنگام باز کردن فایل‌های Google Workspace استفاده می‌شود.
  • RESOURCE_KEYS : یک دیکشنری JSON از شناسه‌های فایل که به کلیدهای منبع مربوطه نگاشت شده‌اند.
  • open : عملی که انجام می‌شود. مقدار آن هنگام استفاده از URL باز، 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;
        }
      }
    }

    پایتون

    ‎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")

    نود جی اس

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

    پی اچ پی

    ‎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 کدگذاری شده است، بنابراین برنامه شما باید کاراکترهای escape را مدیریت کرده و آن را به صورت JSON تجزیه کند.

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

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

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