ড্রাইভ UI এর সাথে একীভূত করুন "এর সাথে খুলুন" কনটেক্সট মেনু

যখন কোনো ব্যবহারকারী একটি ফাইল নির্বাচন করে Drive UI-এর "Open with" মেনু আইটেমটিতে ক্লিক করেন, তখন Drive ব্যবহারকারীকে "Configure a Drive UI integration" -এ সংজ্ঞায়িত সেই অ্যাপের Open URL-এ পুনঃনির্দেশিত করে।

আপনি যদি Drive UI ইন্টিগ্রেশন কনফিগার করার সময় "Importing" বক্সটি চেক করে থাকেন, তাহলে ব্যবহারকারী খোলার জন্য অ্যাপ-নির্দিষ্ট এবং Google Workspace ফাইলের একটি মিশ্রণ নির্বাচন করতে পারেন। আপনি যখন একটি Drive UI ইন্টিগ্রেশন কনফিগার করেন, তখন অ্যাপ-নির্দিষ্ট ফাইলগুলি "Default MIME types" এবং "Default file extensions" ফিল্ডে সংজ্ঞায়িত করা হয়, অন্যদিকে Google Workspace ফাইলগুলি "Secondary MIME types" এবং "Secondary file extensions" ফিল্ডে সংজ্ঞায়িত করা হয়।

ব্যবহারকারী যে প্রতিটি ফাইল খুলতে চান, Drive আপনার সংজ্ঞায়িত ডিফল্ট এবং সেকেন্ডারি MIME টাইপের সাথে সেটির MIME টাইপ মিলিয়ে দেখে:

  • 'ডিফল্ট MIME টাইপস' ফিল্ডে সংজ্ঞায়িত MIME টাইপগুলির জন্য, ফাইল আইডি আপনার অ্যাপে পাঠানো হয়। অ্যাপ-নির্দিষ্ট ফাইলগুলি কীভাবে পরিচালনা করতে হয় সে সম্পর্কে তথ্যের জন্য, 'অ্যাপ-নির্দিষ্ট ডকুমেন্টের জন্য একটি ওপেন URL পরিচালনা করুন' দেখুন।

  • 'সেকেন্ডারি MIME টাইপস' ফিল্ডে সংজ্ঞায়িত MIME টাইপগুলোর জন্য, ড্রাইভ UI একটি ডায়ালগ প্রদর্শন করে ব্যবহারকারীকে জিজ্ঞাসা করে যে গুগল ওয়ার্কস্পেস ফাইলটিকে কোন ফাইল টাইপে রূপান্তর করতে হবে। উদাহরণস্বরূপ, যদি আপনি ড্রাইভ UI-তে একটি গুগল ডক্স ফাইল নির্বাচন করেন এবং 'সেকেন্ডারি MIME টাইপস' ফিল্ডটি নির্দেশ করে যে আপনার অ্যাপ text/plain বা application/pdf সমর্থন করে, তাহলে ড্রাইভ UI ব্যবহারকারীকে জিজ্ঞাসা করে যে তারা প্লেইন টেক্সট নাকি PDF-এ রূপান্তর করতে চান।

    Google Workspace ফাইলগুলি কীভাবে পরিচালনা করতে হয় সে সম্পর্কে তথ্যের জন্য, "Handle an Open URL for Google Workspace documents" দেখুন। Google Workspace ডকুমেন্ট এবং MIME টাইপ রূপান্তর ফরম্যাটের তালিকার জন্য, "Export MIME types for Google Workspace documents" দেখুন।

অ্যাপ-নির্দিষ্ট ডকুমেন্টের জন্য একটি ওপেন ইউআরএল পরিচালনা করুন

"ড্রাইভ UI ইন্টিগ্রেশন কনফিগার করুন" -এ যেমন উল্লেখ করা হয়েছে, আপনার অ্যাপ ফাইলটি খোলার জন্য প্রয়োজনীয় তথ্যসহ টেমপ্লেট ভেরিয়েবল গ্রহণ করে। আপনার অ্যাপ একটি state প্যারামিটারের মধ্যে ডিফল্ট টেমপ্লেট ভেরিয়েবলের একটি সেট গ্রহণ করে। একটি অ্যাপ-নির্দিষ্ট ওপেন ইউআরএল (Open URL)-এর জন্য ডিফল্ট 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. ID ভ্যালু ব্যবহার করে পারমিশন চেক করতে, ফাইলের মেটাডেটা আনতে এবং ফাইলের কন্টেন্ট ডাউনলোড করতে files.get মেথডটি ব্যবহার করুন।
  4. অনুরোধে resourceKeys সেট করা থাকলে, X-Goog-Drive-Resource-Keys অনুরোধ হেডারটি সেট করুন। রিসোর্স কী সম্পর্কে আরও তথ্যের জন্য, রিসোর্স কী ব্যবহার করে লিঙ্ক-শেয়ার করা ফাইল অ্যাক্সেস করুন দেখুন।

state প্যারামিটারটি ইউআরএল-এনকোডেড, তাই আপনার অ্যাপকে অবশ্যই এস্কেপ ক্যারেক্টারগুলো হ্যান্ডেল করতে হবে এবং এটিকে JSON হিসেবে পার্স করতে হবে।

গুগল ওয়ার্কস্পেস ডকুমেন্টের জন্য একটি ওপেন ইউআরএল পরিচালনা করুন

"ড্রাইভ UI ইন্টিগ্রেশন কনফিগার করুন" -এ যেমন উল্লেখ করা হয়েছে, আপনার অ্যাপ একটি state প্যারামিটারের মধ্যে টেমপ্লেট ভেরিয়েবলের একটি ডিফল্ট সেট গ্রহণ করে। একটি গুগল ওয়ার্কস্পেস ওপেন ইউআরএল-এর জন্য ডিফল্ট state তথ্য হলো:

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

এই আউটপুটে নিম্নলিখিত মানগুলি অন্তর্ভুক্ত রয়েছে:

  • EXPORT_ID : এক্সপোর্ট করা হচ্ছে এমন ফাইল আইডিগুলোর একটি কমা-দ্বারা-বিভক্ত তালিকা। শুধুমাত্র গুগল ওয়ার্কস্পেস ফাইল খোলার সময় ব্যবহৃত হয়।
  • RESOURCE_KEYS : ফাইল আইডিগুলোর একটি JSON ডিকশনারি, যা তাদের নিজ নিজ রিসোর্স কী-এর সাথে ম্যাপ করা থাকে।
  • open : যে কাজটি করা হচ্ছে। ওপেন ইউআরএল ব্যবহার করার সময় এর মান open হয়।
  • USER_ID : প্রোফাইল আইডি যা ব্যবহারকারীকে শনাক্ত করে।

আপনার অ্যাপকে অবশ্যই নিম্নলিখিত ধাপগুলো অনুসরণ করে এই অনুরোধটির ওপর কাজ করতে হবে:

  1. state ফিল্ডে open ভ্যালু এবং exportIds ফিল্ডের উপস্থিতি উভয়ই শনাক্ত করার মাধ্যমে যাচাই করুন যে এটি একটি ফাইল খোলার অনুরোধ।

  2. পারমিশন চেক করতে, ফাইলের মেটাডেটা আনতে এবং EXPORT_ID ভ্যালু ব্যবহার করে MIME টাইপ নির্ধারণ করতে files.get মেথডটি ব্যবহার করুন।

  3. files.export মেথড ব্যবহার করে ফাইলের বিষয়বস্তু রূপান্তর করুন। নিচের কোড নমুনাটিতে দেখানো হয়েছে কিভাবে একটি গুগল ওয়ার্কস্পেস ডকুমেন্টকে অনুরোধকৃত 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;
        }
    
    }

রূপান্তরিত ফাইলগুলিকে শুধুমাত্র পঠনযোগ্য (read-only) হিসেবে প্রদর্শন করুন অথবা ব্যবহারকারীকে নতুন ফাইল টাইপ হিসেবে ফাইলটি সংরক্ষণ করার জন্য একটি ডায়ালগ বক্স দেখান।

state প্যারামিটারটি ইউআরএল-এনকোডেড, তাই আপনার অ্যাপকে অবশ্যই এস্কেপ ক্যারেক্টারগুলো হ্যান্ডেল করতে হবে এবং এটিকে JSON হিসেবে পার্স করতে হবে।

ব্যবহারকারী এবং নতুন ইভেন্ট

ড্রাইভ অ্যাপগুলোর উচিত সমস্ত "ওপেন উইথ" ইভেন্টকে সম্ভাব্য সাইন-ইন হিসেবে বিবেচনা করা। কিছু ব্যবহারকারীর একাধিক অ্যাকাউন্ট থাকতে পারে, তাই state প্যারামিটারে থাকা ইউজার আইডি বর্তমান সেশনের সাথে নাও মিলতে পারে। যদি state প্যারামিটারে থাকা ইউজার আইডি বর্তমান সেশনের সাথে না মেলে, তাহলে আপনার অ্যাপের জন্য বর্তমান সেশনটি শেষ করুন এবং অনুরোধ করা ব্যবহারকারী হিসেবে সাইন ইন করুন।

গুগল ড্রাইভ UI থেকে কোনো অ্যাপ্লিকেশন খোলার পাশাপাশি, অ্যাপ্লিকেশনগুলো অ্যাপের ভেতর থেকে কন্টেন্ট বাছাই করার জন্য একটি ফাইল পিকার প্রদর্শন করতে পারে। আরও তথ্যের জন্য, গুগল পিকার দেখুন।