與雲端硬碟使用者介面整合's "開啟內容選單

使用者選取檔案並按一下雲端硬碟 UI 的「選擇開啟工具」時 選單項目,雲端硬碟重新導向 使用者前往該應用程式的開啟網址 (見設定雲端硬碟 UI) 整合

如果您勾選了「匯入」方塊 使用者可以選取應用程式專屬和應用程式的組合 要開啟的 Google Workspace 檔案。設定雲端硬碟 UI 時的設定方式 整合,方法是在「預設 MIME 類型」中定義應用程式專屬檔案和 「預設副檔名」而 Google Workspace 是在「次要 MIME 類型」中定義和「次要副檔名」 只要使用來自這些領域的 小型資料集訓練即可

針對使用者想開啟的每個檔案,雲端硬碟會檢查 MIME 依照您定義的預設和次要 MIME 類型指定類型:

  • 適用於「預設 MIME 類型」中定義的 MIME 類型則檔案 ID 為 傳遞到您的應用程式如要瞭解如何處理應用程式特定檔案, 請參閱「處理應用程式特定文件的開啟網址」。

  • 適用於「次要 MIME 類型」中定義的 MIME 類型欄位,則 雲端硬碟 UI 顯示對話方塊,詢問使用者要匯入哪個檔案類型 則會將 Google Workspace 檔案轉換成舉例來說,假設您選取 雲端硬碟 UI 和「次要 MIME」中的 Google 文件檔案 類型」欄位建議您的應用程式支援文字/純文字或應用程式/PDF, 雲端硬碟 UI 詢問使用者是否要轉換為純文字 或 PDF 檔案

    瞭解如何處理 Google Workspace 檔案,請參閱「處理 Google Workspace 文件的開啟網址」。 如需 Google Workspace 文件和 MIME 類型轉換格式的清單, 請參閱「匯出 Google Workspace 的 MIME 類型 文件

處理應用程式特定文件的開啟網址

如「設定雲端硬碟 UI」所述 整合 應用程式會收到範本變數,內含要開啟應用程式的資訊 檔案。應用程式會收到一組預設的範本變數 state 參數中的值。 應用程式特定開啟網址的預設 state 資訊如下:

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

這項輸出內容包含下列值:

  • ID:父項資料夾的 ID。
  • RESOURCE_KEYS:檔案 ID 的對應 JSON 字典: 各自的資源金鑰
  • open:正在執行的動作。使用 Open 時,值為 open 網址。
  • USER_ID:用來識別使用者的個人資料 ID。

您的應用程式必須依照下列步驟處理這項要求:

  1. 確認 action 欄位的值為 open,且 ids 欄位為 。
  2. 使用 userId 值為使用者建立新的工作階段。如要 請參閱使用者和新事件
  3. 請使用 files.get 方法進行檢查 權限、擷取檔案中繼資料,以及下載 ID 值。
  4. 如果已在要求上設定 resourceKeys,請將 X-Goog-Drive-Resource-Keys 要求標頭。如要進一步瞭解 資源金鑰,請參閱「使用資源存取透過連結共用的檔案」 金鑰

state 參數經過網址編碼,因此您的應用程式必須處理逸出 並剖析為 JSON 格式

處理 Google Workspace 文件的開啟網址

如「設定雲端硬碟 UI」所述 整合,您的應用程式就會收到一組預設的 state 參數中的範本變數。預設的 state 資訊 Google Workspace 的 Open 網址是:

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

這項輸出內容包含下列值:

  • EXPORT_ID:逗號分隔的檔案 ID 清單 匯出 (僅適用於開啟內建的 Google 文件時)。
  • RESOURCE_KEYS:檔案 ID 的對應 JSON 字典: 各自的資源金鑰
  • open:正在執行的動作。使用 Open 時,值為 open 網址。
  • USER_ID:用來識別使用者的個人資料 ID。

您的應用程式必須依照下列步驟處理這項要求:

  1. 偵測 open,驗證此要求是否開啟檔案 值以及 exportIds 欄位是否存在。state

  2. 請使用 files.get 方法進行檢查 權限、擷取檔案中繼資料,以及使用 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

    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 參數經過網址編碼,因此您的應用程式必須處理逸出 並剖析為 JSON 格式

使用者與新活動

雲端硬碟應用程式應將所有項目視為「開啟方式」安排活動 登入。部分使用者可能會有多個帳戶,因此 state 中的使用者 ID 參數可能與目前的工作階段不符。如果 state 中的 User-ID 參數與目前的工作階段不符,請結束目前的工作階段, 並以要求的使用者的身分登入。

除了透過 Google 雲端硬碟使用者介面開啟應用程式外,應用程式也可以 會顯示檔案選擇器,以便在應用程式中選取內容。如要 相關資訊,請參閱 Google Picker