بارگیری های رسانه ای قابل ازسرگیری

هنگامی که یک فایل رسانه ای بزرگ را از سرور دانلود می کنید، از بارگیری مجدد رسانه برای دانلود تکه تکه فایل استفاده کنید. کتابخانه‌های Google API ایجاد شده حاوی روش‌های راحت برای تعامل با بارگیری رسانه‌های قابل ازسرگیری هستند.

پروتکل بارگیری رسانه قابل ازسرگیری مشابه پروتکل بارگذاری رسانه قابل ازسرگیری است که در اسناد Google Drive API توضیح داده شده است.

جزئیات پیاده سازی

کلاس های اصلی مورد علاقه MediaHttpDownloader و MediaHttpDownloaderProgressListener هستند. محتوای رسانه به صورت تکه‌ای دانلود می‌شود و اندازه قطعه قابل تنظیم است. اگر در یک درخواست با خطای سرور مواجه شد، درخواست دوباره امتحان می شود.

اگر روش‌های موجود در کتابخانه‌های تولید شده خاص سرویس، دانلود را در سند Discovery پشتیبانی می‌کنند، یک روش دانلود راحت برای این روش‌ها ایجاد می‌شود که یک OutputStream را می‌گیرد. (برای اطلاعات بیشتر در مورد استفاده از بارگیری رسانه با سرویس Google APIs Discovery، به دانلود رسانه مراجعه کنید.)

مثلا:

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 Client Library برای جاوا معرفی شد.

دانلود مستقیم رسانه، کل محتوای رسانه را در یک درخواست HTTP دانلود می‌کند، برخلاف پروتکل دانلود مجدد رسانه، که می‌تواند در چندین درخواست بارگیری شود. انجام دانلود مستقیم تعداد درخواست‌های HTTP را کاهش می‌دهد اما احتمال خرابی‌ها (مانند خرابی اتصال) را افزایش می‌دهد که ممکن است با دانلودهای زیاد اتفاق بیفتد.

کاربرد همان چیزی است که در بالا توضیح داده شد، به علاوه تماس زیر که به MediaHttpDownloader می‌گوید دانلود مستقیم را انجام دهد:

mediaHttpDownloader.setDirectDownloadEnabled(true);