تحميل وسائط

تتيح العديد من طرق واجهة برمجة التطبيقات إمكانية تحميل الوسائط بالإضافة إلى نص عادي. وفي هذه الحالة، يتم تحميل طريقة الطلب العادية بشكل زائد للحصول على نسخة Stream للتحميل.

نظرة عامة

يجب استخدام حقل قابل للاستئناف مع أي Stream تريد تحميله. تحميل الوسائط، الذي يسمح بتحميل مجموعات البث في مجموعات أصغر. يعد ذلك مفيدًا بشكل خاص إذا كنت تنقل ملفات كبيرة، واحتمال حدوث انقطاع في الشبكة أو إجراء أي عملية بث أخرى كان الفشل مرتفعًا. وقد يقلل أيضًا استخدام معدّل نقل البيانات في حال حدوث مشاكل في الشبكة. لأنك لست مضطرًا إلى إعادة تشغيل عمليات تحميل الملفات الكبيرة من البداية.

ResumableMediaUpload

ميزة "تحميل الوسائط القابلة للاستئناف" هي ميزة في مكتبة برامج .NET من Google API منذ الإصدار 1.2.0 التجريبي. تحتوي المكتبات الخاصة بواجهة Google API على طرق ملائمة التفاعل مع هذه الميزة.

يتم وصف بروتوكول تحميل الوسائط القابل للاستئناف، على سبيل المثال، في صفحة تحميل الوسائط لواجهة برمجة تطبيقات Drive. الفئة الرئيسية من الاهتمام هي ResumableUpload وفي هذه الحالة، يتم تحميل محتوى الوسائط إلى أجزاء.

يبلغ حجم المقطع الافتراضي 10 ميغابايت، ولكن يمكنك تغييره لضبط السمة ChunkSize في الطلب على أي مضاعفات بحجم 256 كيلوبايت. في حال مواجهة خطأ في الخادم في أحد الطلبات، سيحدث رقود أسي يُستخدم لإعادة إرسال وحدات البايت التي لم يتم تحميلها بنجاح. بشكل تلقائي، يتم تفعيل الرقود الأسي لكل طلب عميل. يمكنك تغيير السلوك الافتراضي عند إنشاء عنصر خدمة جديد من خلال تغيير فندق DefaultExponentialBackOffPolicy على BaseClientService.Initializer و/أو تعيين HttpClientInitializer إلى تنفيذك الخاص لـ IConfigurableHttpClientInitializer تضيف بعض سياسات التراجع.

يتم تحديد الطرق التي تتيح تحميل الوسائط في المستندات المرجعية للمستندات الخاصة بواجهة برمجة التطبيقات. بالنسبة إلى طُرق واجهة برمجة التطبيقات هذه، يُرجى تسهيل استخدام Upload تمت إضافة UploadAsync طريقة. تستخدم هذه الطرق Stream للتحميل ونوع المحتوى كمَعلمات.

احرص على أن يكون موضع البث الذي تحمّله 0، وإلا ستظهر رسالة خطأ، مثل "System.invalidOperationException: لم يتم العثور على العنوان المحدَّد".

يُرجى العلم بأنّه نتيجةً لسلوك HttpClient في إطار العمل الصف، إذا انتهت مهلة التحميل، يتم طرح TaskCanceledException. إذا رأيت هذا الاستثناء، ننصحك بزيادة السمة Timeout يدويًا في العميل الذي يستخدمه عنصر الخدمة.

نموذج التعليمات البرمجية

// Create the service using the client credentials.
var service = new DriveService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "Application_Name"
});

using var uploadStream = System.IO.File.OpenRead("Local_File_Name");

// Create the File resource to upload.
Google.Apis.Drive.v3.Data.File driveFile = new Google.Apis.Drive.v3.Data.File
{
    Name = "Drive_File_Name"
};
// Get the media upload request object.
FilesResource.CreateMediaUpload insertRequest = service.Files.Create(
    driveFile, uploadStream, "image/jpeg");

// Add handlers which will be notified on progress changes and upload completion.
// Notification of progress changed will be invoked when the upload was started,
// on each upload chunk, and on success or failure.
insertRequest.ProgressChanged += Upload_ProgressChanged;
insertRequest.ResponseReceived += Upload_ResponseReceived;

await insertRequest.UploadAsync();

static void Upload_ProgressChanged(IUploadProgress progress) =>
    Console.WriteLine(progress.Status + " " + progress.BytesSent);

static void Upload_ResponseReceived(Google.Apis.Drive.v3.Data.File file) =>
    Console.WriteLine(file.Name + " was uploaded successfully");