Как скачать большой файл с 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