Drive के यूआई's "के साथ खोलें" संदर्भ मेन्यू के साथ इंटिग्रेट करें

जब कोई उपयोगकर्ता किसी फ़ाइल को चुनता है और Drive के यूज़र इंटरफ़ेस (यूआई) में मौजूद "इससे खोलें" मेन्यू आइटम पर क्लिक करता है, तो Drive उस उपयोगकर्ता को उस ऐप्लिकेशन के ओपन यूआरएल पर रीडायरेक्ट करता है. यह यूआरएल, Drive के यूज़र इंटरफ़ेस (यूआई) के साथ इंटिग्रेशन कॉन्फ़िगर करें में तय किया गया होता है.

अगर आपने Drive के यूज़र इंटरफ़ेस (यूआई) को इंटिग्रेट करते समय "इंपोर्ट करना" बॉक्स पर सही का निशान लगाया है, तो उपयोगकर्ता के पास ऐप्लिकेशन के हिसाब से और Google Workspace की फ़ाइलों को एक साथ खोलने का विकल्प होता है. Drive के यूज़र इंटरफ़ेस (यूआई) के इंटिग्रेशन को कॉन्फ़िगर करते समय, ऐप्लिकेशन से जुड़ी फ़ाइलों को "डिफ़ॉल्ट MIME टाइप" और "डिफ़ॉल्ट फ़ाइल एक्सटेंशन" फ़ील्ड में तय किया जाता है. वहीं, Google Workspace की फ़ाइलों को "सेकंडरी MIME टाइप" और "सेकंडरी फ़ाइल एक्सटेंशन" फ़ील्ड में तय किया जाता है.

उपयोगकर्ता जिस फ़ाइल को खोलना चाहता है उसके लिए, Drive आपके तय किए गए डिफ़ॉल्ट और सेकंडरी MIME टाइप के हिसाब से MIME टाइप की जांच करता है:

  • "डिफ़ॉल्ट MIME टाइप" फ़ील्ड में तय किए गए MIME टाइप के लिए, फ़ाइल आईडी आपके ऐप्लिकेशन को पास किया जाता है. ऐप्लिकेशन से जुड़ी फ़ाइलों को मैनेज करने के तरीके के बारे में जानने के लिए, ऐप्लिकेशन से जुड़े दस्तावेज़ों के लिए, Open URL को मैनेज करना लेख पढ़ें.

  • "सेकंडरी MIME टाइप" फ़ील्ड में तय किए गए MIME टाइप के लिए, Drive के यूज़र इंटरफ़ेस (यूआई) में एक डायलॉग दिखता है. इसमें उपयोगकर्ता से पूछा जाता है कि Google Workspace फ़ाइल को किस फ़ाइल टाइप में बदलना है. उदाहरण के लिए, अगर आपने Drive के यूज़र इंटरफ़ेस (यूआई) में कोई Google Docs फ़ाइल चुनी है और "सेकंडरी MIME टाइप" फ़ील्ड से पता चलता है कि आपका ऐप्लिकेशन text/plain या application/pdf फ़ॉर्मैट के साथ काम करता है, तो Drive का यूज़र इंटरफ़ेस (यूआई) उपयोगकर्ता से पूछेगा कि क्या उसे फ़ाइल को सादे टेक्स्ट या PDF में बदलना है.

    Google Workspace फ़ाइलों को मैनेज करने के तरीके के बारे में जानने के लिए, Google Workspace दस्तावेज़ों के लिए ओपन यूआरएल को मैनेज करना लेख पढ़ें. Google Workspace के दस्तावेज़ों और MIME टाइप कन्वर्ज़न फ़ॉर्मैट की सूची के लिए, Google Workspace के दस्तावेज़ों के लिए MIME टाइप एक्सपोर्ट करना लेख पढ़ें.

ऐप्लिकेशन से जुड़े दस्तावेज़ों के लिए, 'यूआरएल खोलें' अनुरोध को हैंडल करना

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. अनुमतियां देखने, फ़ाइल का मेटाडेटा फ़ेच करने, और ID वैल्यू का इस्तेमाल करके फ़ाइल का कॉन्टेंट डाउनलोड करने के लिए, files.get तरीके का इस्तेमाल करें.
  4. अगर अनुरोध पर resourceKeys सेट किया गया था, तो X-Goog-Drive-Resource-Keys अनुरोध हेडर सेट करें. संसाधन कुंजियों के बारे में ज़्यादा जानने के लिए, संसाधन कुंजियों का इस्तेमाल करके, लिंक शेयर की गई फ़ाइलों को ऐक्सेस करना लेख पढ़ें.

state पैरामीटर को यूआरएल के हिसाब से कोड में बदला जाता है. इसलिए, आपके ऐप्लिकेशन को एस्केप वर्णों को हैंडल करना होगा और इसे JSON के तौर पर पार्स करना होगा.

Google Workspace दस्तावेज़ों के लिए, Open URL को मैनेज करना

Drive के यूज़र इंटरफ़ेस (यूआई) के साथ इंटिग्रेशन कॉन्फ़िगर करना लेख में बताया गया है कि आपके ऐप्लिकेशन को state पैरामीटर में, टेंप्लेट वैरिएबल का डिफ़ॉल्ट सेट मिलता है. Google Workspace के ओपन यूआरएल के लिए, डिफ़ॉल्ट state की जानकारी यह है:

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

इस आउटपुट में ये वैल्यू शामिल होती हैं:

  • EXPORT_ID: एक्सपोर्ट किए जा रहे फ़ाइल आईडी की कॉमा लगाकर अलग की गई सूची (इसका इस्तेमाल सिर्फ़ Google के इन-बिल्ट दस्तावेज़ों को खोलने के लिए किया जाता है).
  • RESOURCE_KEYS: यह फ़ाइल आईडी की JSON डिक्शनरी है, जिसे उनकी संबंधित संसाधन कुंजियों पर मैप किया जाता है.
  • open: कार्रवाई की जा रही है. ओपन यूआरएल का इस्तेमाल करते समय, वैल्यू open होती है.
  • USER_ID: यह उपयोगकर्ता की पहचान करने वाला प्रोफ़ाइल आईडी होता है.

आपका ऐप्लिकेशन, इन चरणों को पूरा करके इस अनुरोध पर कार्रवाई करे:

  1. पुष्टि करें कि यह फ़ाइल खोलने का अनुरोध है. इसके लिए, state फ़ील्ड में मौजूद open वैल्यू और exportIds फ़ील्ड की मौजूदगी का पता लगाएं.

  2. files.get तरीके का इस्तेमाल करके, अनुमतियां देखें, फ़ाइल का मेटाडेटा फ़ेच करें, और EXPORT_ID वैल्यू का इस्तेमाल करके MIME टाइप तय करें.

  3. files.export तरीके का इस्तेमाल करके, फ़ाइल के कॉन्टेंट को बदलें. यहां दिए गए कोड के उदाहरण में, Google Workspace दस्तावेज़ को अनुरोध किए गए MIME टाइप में एक्सपोर्ट करने का तरीका बताया गया है.

  4. अगर अनुरोध पर resourceKey सेट किया गया था, तो X-Goog-Drive-Resource-Keys अनुरोध हेडर सेट करें. संसाधन कुंजियों के बारे में ज़्यादा जानने के लिए, संसाधन कुंजियों का इस्तेमाल करके, लिंक शेयर की गई फ़ाइलों को ऐक्सेस करना लेख पढ़ें.

    Java

    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
    /**
     * 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
    <?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 पैरामीटर को यूआरएल के हिसाब से कोड में बदला जाता है. इसलिए, आपके ऐप्लिकेशन को एस्केप वर्णों को हैंडल करना होगा और इसे JSON के तौर पर पार्स करना होगा.

उपयोगकर्ता और नए इवेंट

Drive ऐप्लिकेशन को "इसकी मदद से खोलें" वाले सभी इवेंट को संभावित साइन-इन के तौर पर मानना चाहिए. ऐसा हो सकता है कि कुछ उपयोगकर्ताओं के पास एक से ज़्यादा खाते हों. इसलिए, state पैरामीटर में मौजूद User ID, मौजूदा सेशन से मेल न खाए. अगर state पैरामीटर में मौजूद उपयोगकर्ता आईडी, मौजूदा सेशन से मेल नहीं खाता है, तो अपने ऐप्लिकेशन के लिए मौजूदा सेशन खत्म करें. इसके बाद, अनुरोध करने वाले उपयोगकर्ता के तौर पर साइन इन करें.

Google Drive के यूज़र इंटरफ़ेस (यूआई) से किसी ऐप्लिकेशन को खोलने के अलावा, ऐप्लिकेशन में फ़ाइल चुनने वाला टूल भी दिख सकता है. इससे ऐप्लिकेशन में मौजूद कॉन्टेंट को चुना जा सकता है. ज़्यादा जानकारी के लिए, Google Picker देखें.