Возобновляемые загрузки мультимедиа

При загрузке большого медиафайла с сервера используйте возобновляемую загрузку мультимедиа , чтобы загружать файл по частям. Библиотеки, созданные API Google, содержат удобные методы для взаимодействия с возобновляемой загрузкой мультимедиа.

Протокол возобновляемой загрузки мультимедиа аналогичен протоколу возобновляемой загрузки мультимедиа, который описан в документации Google Drive API .

Детали реализации

Основные представляющие интерес классы — MediaHttpDownloader и MediaHttpDownloaderProgressListener . Медиа-контент загружается порциями, размер порции можно настроить. Если в запросе встречается ошибка сервера, запрос повторяется.

Если методы в сгенерированных для конкретной службы библиотеках поддерживают загрузку в документе Discovery , то для этих методов создается удобный метод загрузки, который принимает OutputStream . (Подробнее об использовании загрузки мультимедиа с помощью службы обнаружения API Google см. в разделе Загрузка мультимедиа .)

Например:

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

Вы также можете использовать эту функцию без создания библиотек, созданных для конкретной службы. Вот пример:

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

MediaHttpDownloader downloader = new MediaHttpDownloader(transport, httpRequestInitializer);
downloader.setProgressListener(new CustomProgressListener());
downloader.download(requestUrl, out);

Прямая загрузка мультимедиа

Возобновляемая загрузка мультимедиа включена по умолчанию, но вы можете отключить ее и вместо этого использовать прямую загрузку мультимедиа, например, если вы загружаете небольшой файл. Прямая загрузка мультимедиа была представлена ​​в бета-версии клиентской библиотеки Google API для Java 1.9.0 .

Прямая загрузка мультимедиа загружает весь медиаконтент за один HTTP-запрос, в отличие от протокола возобновляемой загрузки мультимедиа, который может загружать несколько запросов. Выполнение прямой загрузки уменьшает количество HTTP-запросов, но увеличивает вероятность сбоев (например, сбоев соединения), которые могут произойти при больших загрузках.

Использование такое же, как описано выше, плюс следующий вызов, который сообщает MediaHttpDownloader о необходимости прямой загрузки:

mediaHttpDownloader.setDirectDownloadEnabled(true);