ผสานรวมกับเมนูตามบริบท "เปิดด้วย" ของ UI ของไดรฟ์

เมื่อผู้ใช้เลือกไฟล์และคลิกรายการในเมนู "เปิดด้วย" ของ UI ของไดรฟ์ ไดรฟ์จะเปลี่ยนเส้นทางผู้ใช้ไปยัง URL แบบเปิดของแอปนั้น ที่กำหนดไว้ในหัวข้อกำหนดค่าการผสานรวม UI ของไดรฟ์

หากเลือกช่อง "การนำเข้า" เมื่อกำหนดค่าการผสานรวม UI ของไดรฟ์ ผู้ใช้จะเลือกชุดค่าผสมของแอปและไฟล์ Google Workspace เพื่อเปิดได้ เมื่อกำหนดค่าการผสานรวม UI ของไดรฟ์ ระบบจะกำหนดไฟล์เฉพาะแอปไว้ในช่อง "ประเภท MIME เริ่มต้น" และ "นามสกุลไฟล์เริ่มต้น" ในขณะที่ไฟล์ Google Workspace จะกำหนดไว้ในช่อง "ประเภท MIME รอง" และ "นามสกุลไฟล์รอง"

สำหรับไฟล์แต่ละไฟล์ที่ผู้ใช้ต้องการเปิด ไดรฟ์จะตรวจสอบประเภท MIME กับประเภท MIME เริ่มต้นและรองที่คุณกำหนดไว้

  • สำหรับประเภท MIME ที่กำหนดในช่อง "ประเภท MIME เริ่มต้น" ระบบจะส่งรหัสไฟล์ไปยังแอปของคุณ ดูข้อมูลเกี่ยวกับวิธีจัดการไฟล์เฉพาะแอปได้ที่จัดการ URL แบบเปิดสำหรับเอกสารเฉพาะแอป

  • สำหรับประเภท MIME ที่กำหนดในช่อง "ประเภท MIME รอง" UI ของไดรฟ์จะแสดงกล่องโต้ตอบที่ถามผู้ใช้ว่าจะแปลงไฟล์ Google Workspace เป็นประเภทใด ตัวอย่างเช่น หากคุณเลือกไฟล์ Google เอกสารใน UI ของไดรฟ์ และช่อง "ประเภท MIME รอง" จะแนะนำว่าแอปรองรับข้อความ/ข้อความธรรมดา หรือแอปพลิเคชัน/PDF อินเทอร์เฟซผู้ใช้ของไดรฟ์จะถามผู้ใช้ว่าต้องการแปลงเป็นข้อความธรรมดา หรือ PDF

    ดูข้อมูลเกี่ยวกับวิธีจัดการไฟล์ Google Workspace ได้ที่หัวข้อจัดการ URL ที่เปิดอยู่สำหรับเอกสาร Google Workspace ดูรายการเอกสารของ Google Workspace และรูปแบบการแปลงประเภท MIME ได้ที่หัวข้อส่งออกประเภท MIME สำหรับเอกสาร Google Workspace

จัดการ URL แบบเปิดสำหรับเอกสารเฉพาะแอป

ดังที่กล่าวไว้ในกำหนดค่าการผสานรวม UI ของไดรฟ์ แอปจะได้รับตัวแปรเทมเพลตพร้อมข้อมูลเพื่อให้แอปเปิดไฟล์ แอปได้รับชุดตัวแปรเทมเพลตเริ่มต้นภายในพารามิเตอร์ state ข้อมูล state ตามค่าเริ่มต้นสำหรับ URL แบบเปิดที่เจาะจงแอปคือ

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

เอาต์พุตนี้จะมีค่าต่อไปนี้

  • ID: รหัสของโฟลเดอร์หลัก
  • RESOURCE_KEYS: พจนานุกรม JSON ของรหัสไฟล์ที่แมปกับคีย์ทรัพยากรที่เกี่ยวข้อง
  • open: สิ่งที่กำลังดำเนินการ ค่าจะเป็น open เมื่อใช้ URL แบบเปิด
  • 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

ตามที่ได้กล่าวไว้ในกำหนดค่าการผสานรวม 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: สิ่งที่กำลังดำเนินการ ค่าจะเป็น open เมื่อใช้ URL แบบเปิด
  • 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 ดูข้อมูลเพิ่มเติมเกี่ยวกับคีย์ทรัพยากรได้ที่เข้าถึงไฟล์ที่แชร์ลิงก์โดยใช้คีย์ทรัพยากร

    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

    ไดรฟ์/snippets/drive-v3/file_snippet/export_pdf.py
    from __future__ import print_function
    
    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

    ไดรฟ์/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_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

ผู้ใช้และกิจกรรมใหม่

แอปไดรฟ์ควรถือว่าเหตุการณ์ที่ "เปิดด้วย" ทั้งหมดเป็นการลงชื่อเข้าใช้ที่อาจเกิดขึ้น ผู้ใช้บางรายอาจมีหลายบัญชี ดังนั้น User-ID ในพารามิเตอร์ state อาจไม่ตรงกับเซสชันปัจจุบัน หาก User-ID ในพารามิเตอร์ state ไม่ตรงกับเซสชันปัจจุบัน ให้สิ้นสุดเซสชันปัจจุบันของแอปแล้วลงชื่อเข้าใช้เป็นผู้ใช้ที่ขอ

นอกจากการเปิดแอปพลิเคชันจาก UI ของ Google ไดรฟ์แล้ว แอปพลิเคชันยังแสดงเครื่องมือเลือกไฟล์เพื่อเลือกเนื้อหาจากภายในแอปสำหรับข้อมูลเพิ่มเติม โปรดดู Google Picker