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

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

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

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

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

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

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

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

همانطور که در Configure a Drive UI integration ذکر شد، برنامه شما متغیرهای الگو را با اطلاعاتی برای برنامه شما دریافت می کند تا فایل را باز کند. برنامه شما مجموعه ای پیش فرض از متغیرهای الگو را در یک پارامتر 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 رمزگذاری شده است، بنابراین برنامه شما باید کاراکترهای فرار را کنترل کند و آن را به عنوان JSON تجزیه کند.

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

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

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

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

  • EXPORT_ID : فهرستی از شناسه‌های فایل که با کاما جدا شده‌اند (فقط هنگام باز کردن اسناد داخلی Google استفاده می‌شود).
  • 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")

    Node.js

    drive/snippets/drive_v3/file_snippets/export_pdf.js
    /**
     * Download a Document file in PDF format
     * @param{string} fileId file ID
     * @return{obj} file status
     * */
    async function exportPdf(fileId) {
      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});
    
      try {
        const result = await service.files.export({
          fileId: fileId,
          mimeType: 'application/pdf',
        });
        console.log(result.status);
        return result;
      } catch (err) {
        // TODO(developer) - Handle error
        throw err;
      }
    }

    PHP

    drive/snippets/drive_v3/src/DriveExportPdf.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 رمزگذاری شده است، بنابراین برنامه شما باید کاراکترهای فرار را کنترل کند و آن را به عنوان JSON تجزیه کند.

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

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

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