Integracja z interfejsem Dysku „Otwórz za pomocą menu kontekstowego”

Gdy użytkownik wybierze plik i kliknie w interfejsie Dysku pole „Otwórz w” danie w menu, przekierowania z Dysku otwarcie adresu URL tej aplikacji zdefiniowanego w artykule Konfigurowanie interfejsu Dysku Google .

Jeśli zaznaczono pole „Importowanie” podczas konfigurowania interfejsu Dysku, użytkownik może wybrać kombinację ustawień Pliki Google Workspace do otwarcia. Gdy skonfigurujesz interfejs Dysku pliki poszczególnych aplikacji są zdefiniowane w sekcji „Domyślne typy MIME” oraz „Domyślne rozszerzenia plików” a Google Workspace Pliki są zdefiniowane w sekcji „Dodatkowe typy MIME” i „Dodatkowe rozszerzenia plików” .

Dysk sprawdza MIME każdego pliku, który użytkownik chce otworzyć. względem zdefiniowanych domyślnych i dodatkowych typów MIME:

  • Dotyczy typów MIME zdefiniowanych w sekcji „Domyślne typy MIME” identyfikator pliku to przekazywane do aplikacji. Informacje o obsłudze plików związanych z konkretnymi aplikacjami znajdziesz w zapoznaj się z sekcją Obsługiwanie otwartego adresu URL w przypadku dokumentów związanych z aplikacją.

  • Dotyczy typów MIME zdefiniowanych w sekcji „Dodatkowe typy MIME” , wartość Interfejs Dysku z oknem z pytaniem, jakiego typu plik przekonwertować plik Google Workspace na format. Jeśli na przykład wybierzesz Plik Dokumentów Google w interfejsie Dysku oraz „Dodatkowe MIME” Typy" sugeruje, że aplikacja obsługuje tekst/zwykły lub aplikację/pdf, Interfejs Dysku pyta użytkownika, czy chce przekonwertować plik na zwykły tekst lub pliku PDF.

    Informacje o obsłudze Google Workspace plików zawiera artykuł Obsługiwanie otwartego adresu URL dokumentów Google Workspace. Listę dokumentów Google Workspace i formatów konwersji typu MIME: Więcej informacji znajdziesz w artykule Eksportowanie typów MIME w Google Workspace dokumenty.

Obsługa otwartego adresu URL dokumentów związanych z aplikacją

Jak wspomnieliśmy w artykule Konfigurowanie interfejsu Dysku , aplikacja otrzymuje zmienne szablonu z informacjami o możliwości uruchomienia aplikacji plik. Aplikacja otrzymuje domyślny zestaw zmiennych szablonu w parametrze state. Domyślna informacja state dla otwartego adresu URL specyficznej aplikacji to:

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

Dane wyjściowe zawierają następujące wartości:

  • ID: identyfikator folderu nadrzędnego.
  • RESOURCE_KEYS: słownik JSON zmapowany na identyfikatory plików odpowiednie klucze zasobów.
  • open: wykonywane działanie. Wartość to open, gdy używana jest wartość Open Adres URL.
  • USER_ID: identyfikator profilu, który jednoznacznie identyfikuje użytkownika.

W odpowiedzi na to żądanie Twoja aplikacja musi wykonać te czynności:

  1. Sprawdź, czy pole action ma wartość open, a pole ids jest obecnie.
  2. Użyj wartości userId, aby utworzyć nową sesję dla użytkownika. Więcej informacji o zalogowanych użytkownikach, zapoznaj się z sekcją Użytkownicy i nowych wydarzeń.
  3. Użyj metody files.get, aby to sprawdzić uprawnień, pobierania metadanych pliku oraz pobierania jego zawartości za pomocą ID.
  4. Jeśli w żądaniu ustawiono atrybut resourceKeys, ustaw parametr Nagłówek żądania X-Goog-Drive-Resource-Keys. Więcej informacji na temat: klucze zasobów, zobacz Uzyskiwanie dostępu do plików udostępnionych za pomocą linków za pomocą zasobu .

Parametr state jest zakodowany na potrzeby adresu URL, więc aplikacja musi obsługiwać zmianę znaczenia i przeanalizuj go jako JSON.

Obsługa otwartego adresu URL dokumentów Google Workspace

Jak wspomnieliśmy w artykule Konfigurowanie interfejsu Dysku , aplikacja otrzyma domyślny zestaw zmiennych szablonu w parametrze state. Domyślne informacje: state dla otwartego adresu URL Google Workspace:

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

Dane wyjściowe zawierają następujące wartości:

  • EXPORT_ID: rozdzielana przecinkami lista identyfikatorów plików objętych wyeksportowane (używane tylko podczas otwierania wbudowanych dokumentów Google).
  • RESOURCE_KEYS: słownik JSON zmapowany na identyfikatory plików odpowiednie klucze zasobów.
  • open: wykonywane działanie. Wartość to open, gdy używana jest wartość Open Adres URL.
  • USER_ID: identyfikator profilu, który identyfikuje użytkownika.

W odpowiedzi na to żądanie Twoja aplikacja musi wykonać te czynności:

  1. Sprawdź, czy to żądanie otwarcia pliku, wykrywając zarówno open, w polu state i obecności pola exportIds.

  2. Użyj metody files.get, aby to sprawdzić pobierania metadanych pliku i określania typu MIME za pomocą EXPORT_ID wartości.

  3. Przekonwertuj zawartość pliku za pomocą files.export. Poniżej przykładowy kod pokazuje, jak wyeksportować dokument Google Workspace do żądany typ MIME.

  4. Jeśli w żądaniu ustawiono atrybut resourceKey, ustaw parametr Nagłówek żądania X-Goog-Drive-Resource-Keys. Więcej informacji na temat: klucze zasobów, zobacz Uzyskiwanie dostępu do plików udostępnionych za pomocą linków za pomocą zasobu .

    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;
        }
    
    }

Wyświetlaj przekonwertowane pliki jako tylko do odczytu lub wyświetlaj okno, które pozwala użytkownikowi zapisz plik jako nowy typ.

Parametr state jest zakodowany na potrzeby adresu URL, więc aplikacja musi obsługiwać zmianę znaczenia i przeanalizuj go jako JSON.

Użytkownicy i nowe wydarzenia

Aplikacje Dysku powinny traktować wszystkie „otwieraj w” zdarzeń jako potencjalnych dane logowania. Niektórzy użytkownicy mogą mieć wiele kont, więc identyfikator użytkownika w state może nie pasować do bieżącej sesji. Jeśli identyfikator użytkownika w state nie pasuje do bieżącej sesji, zakończ bieżącą sesję i zaloguj się jako żądany użytkownik.

Poza otwieraniem aplikacji z interfejsu Dysku Google aplikacje mogą wyświetlać selektor plików umożliwiający wybór treści z poziomu aplikacji. Więcej więcej informacji znajdziesz w selektorze Google.