توضّح هذه الصفحة كيفية تقديم طلب تحميل قابل للاستئناف في واجهة برمجة التطبيقات لخدمة "التجوّل الافتراضي" Publish API. يتيح لك هذا البروتوكول استئناف عملية تحميل بعد أن يؤدي أحد أخطاء الاتصالات إلى إيقاف تدفق البيانات. استخدِم هذا الخيار في الحالات التالية:
- إذا كنت تحمّل ملفات كبيرة
- يكون احتمال انقطاع الاتصال بالشبكة أو حدوث أي مشكلة أخرى في الإرسال هو مرتفع (على سبيل المثال، إذا كنت تحمّل ملفًا من تطبيق متوافق مع الأجهزة الجوّالة).
يمكن أن تقلل عمليات التحميل القابلة للاستئناف أيضًا من استخدام معدل نقل البيانات عند حدوث تعطُّل في الشبكة، لأنّه ليس عليك إعادة بدء عمليات تحميل الملفات الكبيرة من الصفر.
إذا كنت ترسل ملفات صغيرة عبر اتصال شبكة موثوق به، يمكنك استخدامتحميل بسيط بدلاً من ذلك.
بدء جلسة تحميل قابلة للاستئناف
بعد الحصول على uploadUrl
، يمكنك بدء جلسة upload
قابلة للاستئناف:
- أنشئ طلب
POST
إلىuploadUrl
. أضِف عناوين HTTP التالية:
X-Goog-Upload-Protocol
: تم الضبط علىresumable
.X-Goog-Upload-Header-Content-Length
: يتم ضبطه على إجمالي عدد وحدات البايت في بيانات الملف، والتي سيتم نقلها في الطلبات اللاحقة.X-Goog-Upload-Header-Content-Type
: اضبطه على نوع MIME للملف data.X-Goog-Upload-Command
: تم الضبط علىstart
.
أرسِل الطلب.
مثال: بدء جلسة تحميل قابلة للاستئناف
يوضّح المثال التالي كيفية بدء جلسة يمكن استئنافها لتحميل ملف
جديد. في هذه الحالة، يكون الملف صورة وإجمالي عدد وحدات البايت في الملف 4200000. يُرجى العِلم أنّ نص الطلب فارغ، وبالتالي، تم ضبط
عنوان Content-Length
على 0.
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234 HTTP/1.1
Authorization: Bearer [YOUR_AUTH_TOKEN]
Content-Length: 0
X-Goog-Upload-Protocol: resumable
X-Goog-Upload-Header-Content-Length: 4200000
X-Goog-Upload-Header-Content-Type: image/jpeg
X-Goog-Upload-Command: start
يوضّح حفظ عنوان URL لجلسة التحميل القابلة للاستئناف كيفية معالجة الاستجابة لطلب بدء جلسة التحميل القابلة للاستئناف.
حفظ عنوان URL للجلسة التي يمكن استئنافها
بالنسبة إلى الطلب الذي تم إرساله لبدء جلسة تحميل قابلة للاستئناف، سيُرسِل الخادم
ردًا برمز حالة HTTP 200 OK
، بما في ذلك العنوان التالي:
X-Goog-Upload-URL
: عنوان URL فريد يجب استخدامه لإكمال عملية التحميل من خلال كل الطلبات المتبقية.
يُرجى نسخ وحفظ عنوان URL القابل للاستئناف لكي تتمكّن من استخدامه في الطلبات اللاحقة.
مثال: حفظ عنوان URL للجلسة التي يمكن استئنافها
يعرض المثال التالي استجابة تتضمّن عنوان URL لجلسة يمكن استئنافها ومتطلبًا لدقة الحجم.
HTTP/1.1 200 OK
X-Goog-Upload-URL: https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable
تحميل الملف
هناك طريقتان لتحميل ملف باستخدام جلسة قابلة للاستئناف:
- في طلب واحد: وعادةً ما يكون هذا الأسلوب هو الأفضل، لأنه يتطلب عددًا أقل من الطلبات، ما يؤدي بدوره إلى أداء أفضل.
- في عدّة أجزاء استخدِم هذا الأسلوب في الحالات التالية:
- عليك تقليل كمية البيانات المنقولة في أي طلب فردي. قد تحتاج إلى إجراء ذلك عندما يكون هناك حدّ زمني ثابت لطلبات individual .
- يجب تقديم مؤشر مخصّص يعرض مستوى تقدّم التحميل.
- يجب معرفة الحالات التي يكون فيها من الآمن تجاهل البيانات.
طلب واحد
لتحميل الملف في طلب واحد:
- أنشئ طلبًا من النوع
POST
إلى عنوان URL للجلسة التي يمكن استئنافها. - أضِف بيانات الملف إلى نص الطلب.
أضِف رؤوس HTTP التالية:
Content-Length
: يتم ضبطه على عدد البايتات في الملف.X-Goog-Upload-Command
: تم ضبطها علىupload, finalize
.
أرسِل الطلب.
إذا انقطع طلب التحميل أو تلقّيت استجابة 5xx
، اتّبِع
الإجراءات الواردة في مقالة استئناف عملية تحميل متوقّفة.
أجزاء متعددة
لتحميل الملف في أجزاء متعددة:
- أنشئ طلب
POST
لعنوان URL للجلسة القابلة للاستئناف. - أضِف بيانات المقطع إلى محتوى الطلب. أنشئ أجزاء بمضاعفات 2 ميغابايت (ميغابايت)، باستثناء الجزء الأخير الذي يُكمِل عملية التحميل. اجعل حجم الجزء أكبر قدر ممكن لكي يكون التحميل فعّالاً.
أضِف رؤوس HTTP التالية:
Content-Length
: يتم ضبطه على عدد البايتات في الجزء.X-Goog-Upload-Command
: تم ضبطها علىupload
. بالنسبة إلى الجزء الأخير، اضبط القيمة علىupload, finalize
.X-Goog-Upload-Offset
: يتم ضبطه على القيمة المرجعية التي يجب فيها كتابة البايتات. يُرجى العلم أنّه يجب تحميل وحدات البايت بشكل تسلسلي.
أرسِل الطلب. إذا انقطع طلب التحميل أو تلقّيت ردًا برمز
5xx
، اتّبِع الإجراء الموضّح في مقالة استئناف عملية تحميل متوقّفة.كرِّر الخطوات من 1 إلى 4 لكل جزء متبقٍّ في الملف.
مثال: تحميل الملف
طلب واحد
يوضّح المثال التالي طلبًا قابلاً للاستئناف لتحميل ملف JPEG كامل بحجم 4,200,000 بايت في طلب واحد، باستخدام عنوان URL للجلسة القابل للاستئناف الذي تم الحصول عليه في الخطوة السابقة:
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable HTTP/1.1 Content-Length: 4200000 X-Goog-Upload-Command: upload, finalize X-Goog-Upload-Offset: 0 [BYTES 0-4199999]
في حال نجاح الطلب، ستتلقّى رمز حالة HTTP 200 OK
.
شرائح متعددة
يوضّح المثال التالي طلبًا قابلاً للاستئناف لتحميل ملف JPEG بحجم 4,200,000 بايت في أجزاء متعددة، باستخدام عنوان URL للجلسة القابل للاستئناف وحجم دقة الحجم الذي تم الحصول عليه في الخطوة السابقة. يستخدم هذا المثال حجم قطعة هو 2097000 بايت، وهو عدد مضاعَف من 2 ميغابايت (ميبيبايت).
الجزء الأول:
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable HTTP/1.1 Content-Length: 2097000 X-Goog-Upload-Command: upload X-Goog-Upload-Offset: 0[BYTES 0-2096999]
المقطع الثاني:
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable HTTP/1.1 Content-Length: 2097000 X-Goog-Upload-Command: upload X-Goog-Upload-Offset: 2097000[BYTES 2097000-4193999]
الجزء الأخير:
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable HTTP/1.1 Content-Length: 6000 X-Goog-Upload-Command: upload, finalize X-Goog-Upload-Offset: 4194000[BYTES 4194000-4200000]
استئناف عملية تحميل تمت مقاطعتها
إذا انقطع طلب التحميل أو إذا تلقّيت رمز حالة HTTP غير200
، يمكنك الاستعلام عن الخادم لمعرفة نسبة التحميل التي تمت بنجاح:
- أنشئ طلبًا من النوع
POST
إلى عنوان URL للجلسة التي يمكن استئنافها. - يجب ضبط قيمة
X-Goog-Upload-Command
علىquery
. - أرسِل الطلب.
سيستجيب الخادم برمز حالة HTTP 200 OK
والحجم الحالي لتحميل
الملف:
HTTP/1.1 200 OK
X-Goog-Upload-Status: active
X-Goog-Upload-Size-Received: 100
ويمكنك بعد ذلك استئناف التحميل من هذا الموضع. يجب استئناف التحميل من الموضع الذي يقدّمه الخادم، ما لم يتم إرسال أمر مركب للتحميل والإكمال، وفي هذه الحالة، يمكنك أيضًا استئناف التحميل من الموضع 0.
إذا كان عنوان X-Goog-Upload-Status
في ردّ HTTP لطلب طلب البحث
متوفّرًا وكانت القيمة ليست active
، يعني ذلك أنّه سبق أن تم
إنهاء عملية التحميل.