Как скачать большой файл с google drive?

Использую вот такой вот код чтобы скачать большой файл с google drive:

public ByteArrayOutputStream downloadZipSynch(String idFile) {
        OutputStream outputStream = new ByteArrayOutputStream();
        try {
            mDriveService.files().get(idFile)
                    .executeMediaAndDownloadTo(outputStream);
            return (ByteArrayOutputStream) outputStream;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

Получаю исключение:

 Caused by: java.lang.OutOfMemoryError: Failed to allocate a 551813136 byte allocation with 25165824 free bytes and 243MB until OOM, max allowed footprint 306688176, growth limit 536870912

Исключение видимо намекает что я должен грузить файл по частям. Хорошо как это сделать? Я нашел вот ссылку https://developers.google.com/api-client-library/java/google-api-java-client/media-download там используется такой код:

class CustomProgressListener implements MediaHttpDownloaderProgressListener {
  public void progressChanged(MediaHttpDownloader downloader) {
    switch (downloader.getDownloadState()) {
      case MEDIA_IN_PROGRESS:
        System.out.println(downloader.getProgress());
        break;
      case MEDIA_COMPLETE:
        System.out.println("Download is complete!");
    }
  }
}

OutputStream out = new FileOutputStream("/tmp/driveFile.jpg");

DriveFiles.Get request = drive.files().get(fileId);
request.getMediaHttpDownloader().setProgressListener(new CustomProgressListener());
request.executeMediaAndDownloadTo(out);

Возможно он подойдет? Только вот у меня класса DriveFiles нету может это какая то другая библиотека я не пойму вообще в build.gradle я имплементировал это: implementation 'com.google.apis:google-api-services-drive:v3-rev20220815-2.0.0' И в libs проекта кинул файл google-api-client-android-2.0.0.jar


Ответы (0 шт):