המדיה שהעלית

יש כמה שיטות API שתומכות בהעלאה של מדיה בנוסף לגוף רגיל. במקרה כזה, יש עומס יתר על שיטת הבקשה הרגילה כדי לקבל Stream להעלאה.

סקירה כללית

בכל Stream שרוצים להעלות, צריך להשתמש שניתן להמשיך העלאת מדיה, שמאפשרת להעלות שידורי סטרימינג במקטעי נתונים קטנים יותר. זה שימושי במיוחד אם אתם מעבירים קבצים גדולים, וסבירות להפרעה ברשת או לשידור אחר יש סבירות גבוהה. הוא גם יכול לצמצם את השימוש ברוחב הפס במקרה של כשלים ברשת כי אין צורך להפעיל מחדש העלאות קבצים גדולות מההתחלה.

ResumableMediaUpload

'העלאת מדיה שניתן להמשיך' הוגדרה כתכונה בספריית הלקוח של Google API .NET מגרסת 1.2.0 בטא. הספריות הספציפיות ל-Google API מכילות שיטות נוחות אינטראקציה עם התכונה הזו.

הפרוטוקול של העלאת מדיה שניתן להמשיך מתואר, לדוגמה, דף העלאת מדיה ל-Drive API. סיווג העניין העיקרי הוא ResumableUpload ביישום הזה, תוכן המדיה מועלה במקטעי נתונים.

גודל ברירת המחדל של מקטע הנתונים הוא 10MB, אבל אפשר לשנות אותו כך הגדרה של המאפיין ChunkSize בבקשה לכל כפולה של 256KB. אם מתרחשת בבקשה שגיאת שרת, אז השהיה מעריכית לפני ניסיון חוזר (exponential backoff) משמשת לשליחת מחדש הבייטים שלא הועלו בהצלחה. כברירת מחדל, השהיה מעריכית לפני ניסיון חוזר (exponential backoff) מופעלת לכל בקשת לקוח. אפשר לשנות את התנהגות ברירת המחדל כשיוצרים את אובייקט שירות חדש על ידי שינוי של האובייקט נכס DefaultExponentialBackOffPolicy בדומיין BaseClientService.Initializer ו/או הגדרה HttpClientInitializer נכס ליישום משלכם של IConfigurableHttpClientInitializer שמוסיפה מדיניות של השהיה לפני ניסיון חוזר (backoff).

זוהו השיטות שתומכות בהעלאה של מדיה במסמכי העזרה הספציפיים ל-API. לשימוש ב-methods אלה של ממשק ה-API, מומלץ Upload נוספו UploadAsync שיטות. כשמשתמשים בשיטות האלה, זמן ההעלאה של Stream ושל סוג התוכן שלו הוא פרמטרים.

חשוב לוודא שהמיקום של הסטרימינג שאתם מעלים הוא 0, אחרת תקבלו הודעת שגיאה כמו "System.INVALIDOperationActivity: the מעניק הכותרת לא נמצאה".

חשוב לשים לב שבגלל ההתנהגות של 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");