عمليات تنزيل الوسائط القابلة للاستئناف
تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
عند تنزيل ملف وسائط كبير من خادم، استخدم resumable media download لتنزيل مقطع الملف مقطع. واجهة برمجة تطبيقات 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);
إنّ محتوى هذه الصفحة مرخّص بموجب ترخيص Creative Commons Attribution 4.0 ما لم يُنصّ على خلاف ذلك، ونماذج الرموز مرخّصة بموجب ترخيص Apache 2.0. للاطّلاع على التفاصيل، يُرجى مراجعة سياسات موقع Google Developers. إنّ Java هي علامة تجارية مسجَّلة لشركة Oracle و/أو شركائها التابعين.
تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)"],[[["\u003cp\u003eDownload large files efficiently with resumable media download, splitting the process into smaller chunks.\u003c/p\u003e\n"],["\u003cp\u003eUtilize the \u003ccode\u003eMediaHttpDownloader\u003c/code\u003e and \u003ccode\u003eMediaHttpDownloaderProgressListener\u003c/code\u003e classes for managing and monitoring downloads.\u003c/p\u003e\n"],["\u003cp\u003eCustomize the download process by implementing a progress listener to track download state and progress.\u003c/p\u003e\n"],["\u003cp\u003eOpt for direct media download for smaller files, combining the download into a single HTTP request.\u003c/p\u003e\n"],["\u003cp\u003eResumable media download is enabled by default, but direct download can be activated using \u003ccode\u003emediaHttpDownloader.setDirectDownloadEnabled(true)\u003c/code\u003e.\u003c/p\u003e\n"]]],[],null,["When you download a large media file from a server, use\n*resumable media download* to download the file chunk by chunk. The Google API\ngenerated libraries contain convenience methods for interacting with resumable\nmedia download.\n\nThe resumable media download protocol is similar to the resumable media upload\nprotocol, which is described in the\n[Google Drive API documentation](https://developers.google.com/drive/web/manage-uploads#resumable).\n\nImplementation details\n\nThe main classes of interest are [MediaHttpDownloader](https://googleapis.dev/java/google-api-client/latest/com/google/api/client/googleapis/media/MediaHttpDownloader.html) and [MediaHttpDownloaderProgressListener](https://googleapis.dev/java/google-api-client/latest/com/google/api/client/googleapis/media/MediaHttpDownloaderProgressListener.html).\nMedia content is downloaded in chunks, and chunk size is configurable. If a\nserver error is encountered in a request, then the request is retried.\n\nIf methods in the service-specific generated libraries support download in the\n[Discovery document](https://developers.google.com/discovery/v1/using), then a\nconvenient download method is created for these methods that takes in an\n[OutputStream](http://docs.oracle.com/javase/1.5.0/docs/api/org/omg/CORBA/portable/OutputStream.html).\n(For more about using media download with the Google APIs Discovery Service, see\n[Media download](https://developers.google.com/discovery/v1/using#discovery-doc-methods-mediadownload).)\n\nFor example: \n\n class CustomProgressListener implements MediaHttpDownloaderProgressListener {\n public void progressChanged(MediaHttpDownloader downloader) {\n switch (downloader.getDownloadState()) {\n case MEDIA_IN_PROGRESS:\n System.out.println(downloader.getProgress());\n break;\n case MEDIA_COMPLETE:\n System.out.println(\"Download is complete!\");\n }\n }\n }\n\n OutputStream out = new FileOutputStream(\"/tmp/driveFile.jpg\");\n\n DriveFiles.Get request = drive.files().get(fileId);\n request.getMediaHttpDownloader().setProgressListener(new CustomProgressListener());\n request.executeMediaAndDownloadTo(out);\n\nYou can also use this feature without service-specific generated libraries.\nHere is an example: \n\n OutputStream out = new FileOutputStream(\"/tmp/Test.jpg\");\n\n MediaHttpDownloader downloader = new MediaHttpDownloader(transport, httpRequestInitializer);\n downloader.setProgressListener(new CustomProgressListener());\n downloader.download(requestUrl, out);\n\nDirect media download\n\nResumable media download is enabled by default, but you can disable it and use\ndirect media download instead, for example if you are downloading a small file.\nDirect media download was introduced in the\n[1.9.0-beta](http://google-api-java-client.blogspot.com/2012/05/version-190-beta-released.html)\nversion of the Google API Client Library for Java.\n\nDirect media download downloads the whole media content in one HTTP request, as\nopposed to the resumable media download protocol, which can download in multiple\nrequests. Doing a direct download reduces the number of HTTP requests but\nincreases the chance of failures (such as connection failures) that can happen\nwith large downloads.\n\nThe usage is the same as what is described above, plus the following\ncall that tells\n[MediaHttpDownloader](https://googleapis.dev/java/google-api-client/latest/com/google/api/client/googleapis/media/MediaHttpDownloader.html)\nto do direct downloads: \n\n mediaHttpDownloader.setDirectDownloadEnabled(true);"]]