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

Когда вы загружаете большой мультимедийный файл с сервера, используйте возобновляемую загрузку мультимедиа , чтобы загружать файл по частям. Библиотеки, созданные 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);

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

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

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

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

mediaHttpDownloader.setDirectDownloadEnabled(true);