عمليات تنزيل الوسائط القابلة للاستئناف

عند تنزيل ملف وسائط كبير من خادم، يمكنك استخدام تنزيل الوسائط القابلة للاستئناف لتنزيل الملف مقطعًا تلو الآخر. تحتوي المكتبات التي تم إنشاؤها من خلال واجهة برمجة تطبيقات Google على طرق ملائمة للتفاعل مع تنزيل الوسائط القابل للاستئناف.

يشبه بروتوكول تنزيل الوسائط القابلة للاستئناف بروتوكول تحميل الوسائط القابلة للاستئناف، الموضح في وثائق Google Drive API.

تفاصيل التنفيذ

الفئتان الرئيسيتان محل الاهتمام هما MediaHttpDownloader وMediaHttpDownloaderProgressListener. يتم تنزيل محتوى الوسائط في أجزاء، ويكون حجم المقطع قابلاً للتهيئة. وفي حال حدوث خطأ في الخادم في أحد الطلبات، ستتم إعادة محاولة الطلب.

إذا كانت هناك طرق في المكتبات التي تم إنشاؤها حسب الخدمة تتيح التنزيل في مستند "اقتراحات"، يتم إنشاء طريقة تنزيل مناسبة لهذه الطرق التي تستخدم في 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-beta من مكتبة برامج Google API للغة Java.

يؤدي التنزيل المباشر للوسائط إلى تنزيل محتوى الوسائط بالكامل في طلب HTTP واحد، على عكس بروتوكول تنزيل الوسائط القابل للاستئناف الذي يمكن تنزيله في طلبات متعددة. ويقلل التنزيل المباشر من عدد طلبات HTTP ولكنه يزيد من احتمال حدوث إخفاقات (مثل إخفاقات الاتصال) التي يمكن أن تحدث مع التنزيلات الكبيرة.

يتم استخدام الاستخدام نفسه كما هو موضح أعلاه، بالإضافة إلى الطلب التالي الذي يخبر MediaHttpDownloader بإجراء عمليات تنزيل مباشرة:

mediaHttpDownloader.setDirectDownloadEnabled(true);