Cómo forzar la descarga de archivos de Google Team Drive utilizando las bibliotecas API de Google Drive en Java

En mi aplicación, intento forzar la descarga de un archivo de Google Team Drive cuando el usuario hace clic en un enlace de un formulario de mi aplicación.

Algunas actualizaciones:

Tengo un código que puede cargar en Team Drive, así como crear carpetas en Team Drive.

El "Soporte de unidades de equipo: esta aplicación funciona correctamente con archivos en unidades de equipo". en la configuración de API de Google Drive NO SE PUEDE habilitar: puedo marcar esta casilla, pero no puedo hacer clic en el botón Guardar cambios, ya que el botón siempre está deshabilitado. Sin embargo, no creo que ese sea el problema, ya que puedo interactuar con Team Drive en mi código.

He leído la documentación de Google, que es muy limitada:

https://developers.google.com/drive/v3/web/manage-downloads

https://developers.google.com/drive/v3/reference/files/get

También he leído algunas publicaciones:

Descargar archivos de Google Drive con la API de Java

Pero no puedo encontrar una respuesta que funcione. He creado un código que utiliza una cuenta de servicio. El código establece el servicio de la unidad y utiliza la cuenta de servicio como credenciales. Basé la parte de descarga de mi código de este ejemplo de documentación de Google:

https://developers.google.com/drive/v3/web/manage-downloads#examples

Aquí está el código que estoy usando:

public static void downloadFile(String fileID) {
    // Set the drive service...
    Drive service = null;
    try {
        service = getDriveService();
    } catch (IOException e) {
        e.printStackTrace();
    }
    OutputStream outputStream = new ByteArrayOutputStream();
    try {
        service.files().get(fileID).executeMediaAndDownloadTo(outputStream);
        // NEED CODE HERE???????


    } catch (IOException e) {
        e.printStackTrace();
    }
}

/**
 * Build and return an authorized Drive client service.
 * 
 * @return an authorized Drive client service
 * @throws IOException
 */
public static Drive getDriveService() throws IOException {
    Logger.info("GoogleDrive: getDriveService: Starting...");
    GoogleCredential credential = null;
    Drive googleDrive = null;
    try {
        credential = authorize();
        Logger.info("GoogleDrive: getDriveService: Credentials set...");
        googleDrive = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
                .setApplicationName(APPLICATION_NAME).build();
    } catch (IOException ex) {
        System.out.println(ex.toString());
        ex.printStackTrace();
    }
    return googleDrive;
}

/**
 * Creates an authorized Credential object.
 * 
 * @return an authorized Credential object.
 * @throws IOException
 */
@SuppressWarnings("deprecation")
public static GoogleCredential authorize() throws IOException {
    GoogleCredential credential = null;
    String credentialsFileName = "";
    try {
        Logger.info("GoogleDrive: authorize: Starting...");

        Logger.info("GoogleDrive: authorize: Getting credentialsFileName path...");
        credentialsFileName = Configuration.root().getString("google.drive.credentials.file");
        Logger.info("GoogleDrive: authorize: credentialsFileName = " + credentialsFileName);

        Logger.info("GoogleDrive: authorize: Setting InputStream...");
        InputStream in = GoogleDrive.class.getClassLoader().getResourceAsStream(credentialsFileName);
        if (in == null) {
            Logger.info("GoogleDrive: authorize: InputStream is null");
        }
        Logger.info("GoogleDrive: authorize: InputStream set...");

        Logger.info("GoogleDrive: authorize: Setting credential...");
        credential = GoogleCredential.fromStream(in, HTTP_TRANSPORT, JSON_FACTORY)
                .createScoped(Collections.singleton(DriveScopes.DRIVE));
    } catch (IOException ex) {
        System.out.println(ex.toString());
        System.out.println("Could not find file " + credentialsFileName);
        ex.printStackTrace();
    }
    Logger.info("GoogleDrive: authorize: Ending...");
    return credential;
}

Cuando se ejecuta mi código, no hay errores y no sucede nada. Supongo que me falta algún código en la función downloadFile. Si me falta algo o es incorrecto en mi codificación, no dude en proporcionar ejemplos o el código correcto que debería usar.

Agradezco la ayuda.

Respuestas a la pregunta(1)

Su respuesta a la pregunta