عند تنزيل ملف وسائط كبير من خادم، يمكنك استخدام عملية تنزيل الوسائط القابلة للاستئناف لتنزيل مجموعة الملفات حسب المجموعة. تحتوي مكتبات Google التي تم إنشاؤها على طرق ملائمة للتفاعل مع تنزيل الوسائط القابلة للاستئناف.
يشبه بروتوكول تنزيل الوسائط القابل للاستئناف بروتوكول تحميل الوسائط القابلة للاستئناف، والموضّح في مستندات واجهة برمجة تطبيقات Google Drive.
تفاصيل التنفيذ
الفئات الرئيسية المثيرة للاهتمام هي MediaHttpDownloader وMediaHttpDownloaderProgressListener. يتم تنزيل محتوى الوسائط على مراحل، ويمكن ضبط حجم المجموعة. في حال حدث خطأ في الخادم، تتم إعادة محاولة الطلب.
إذا كانت الطرق في المكتبات التي يتم إنشاؤها وفقًا للخدمة تتيح التنزيل في مستند أثناء التصفّح، يتم إنشاء طريقة تنزيل ملائمة لهذه الطرق التي تستخدِمها في StreamStream. (لمعرفة المزيد من المعلومات عن استخدام تنزيل الوسائط مع خدمة استكشاف واجهات برمجة التطبيقات في 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);