Devam Ettirilebilir Medya İndirmeleri

Bir sunucudan büyük bir medya dosyası indirdiğinizde, dosya parçasını parçaya göre indirmek için devam ettirilebilir medya indirme özelliğini kullanın. Google API'nin oluşturduğu kitaplıklar, devam ettirilebilir medya indirme işlemiyle etkileşim için kolay yöntemler içerir.

Devam ettirilebilir medya indirme protokolü, Google Drive API belgelerinde açıklanan devam ettirilebilir medya yükleme protokolüne benzer.

Uygulama ayrıntıları

İlgilenilen temel sınıflar MediaHttpDownloader ve MediaHttpDownloaderProgressListener sınıflarıdır. Medya içeriği parçalar halinde indirilir ve parça boyutu yapılandırılabilir. Bir istekte sunucu hatasıyla karşılaşılırsa istek yeniden denenir.

Hizmete özel olarak oluşturulan kitaplıklardaki yöntemler Keşif belgesinde indirme işlemini destekliyorsa OutputStream'nı alan bu yöntemler için uygun bir indirme yöntemi oluşturulur. (Google API'leri Keşif Hizmeti ile medya indirmeyi kullanma hakkında daha fazla bilgi için Medya indirme bölümüne bakın.)

Örneğin:

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

Bu özelliği hizmete özel olarak oluşturulan kitaplıklar olmadan da kullanabilirsiniz. Örnek:

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

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

Doğrudan medya indirme

Devam ettirilebilir medya indirme varsayılan olarak etkindir, ancak bunu devre dışı bırakabilir ve bunun yerine (örneğin, küçük bir dosya indiriyorsanız) doğrudan medya indirmeyi kullanabilirsiniz. Doğrudan medya indirme, Java için Google API İstemci Kitaplığı'nın 1.9.0-beta sürümünde kullanıma sunulmuştur.

Doğrudan medya indirme, birden çok istekte indirilebilen devam ettirilebilir medya indirme protokolünün aksine, tüm medya içeriğini tek bir HTTP isteğinde indirir. Doğrudan indirme işlemi HTTP isteklerinin sayısını azaltır, ancak büyük indirme işlemlerinde oluşabilecek hata (bağlantı hataları gibi) olasılığını artırır.

Kullanım, yukarıda açıklanan şekilde ve MediaHttpDownloader'a doğrudan indirme işlemi yapmasını bildiren aşağıdaki çağrıyla aynıdır:

mediaHttpDownloader.setDirectDownloadEnabled(true);