Medya Yükleme

Birçok API yöntemi, normal bir yayıncıya ek olarak medya yüklemeyi de destekler. Bu durumda normal istek yöntemi aşırı yüklenir. Yüklemek için Stream.

Genel Bakış

Yüklemek istediğiniz tüm Stream için devam ettirilebilir medya yükleme özelliği, akışların daha küçük parçalar halinde yüklenmesine olanak tanır. Bu, özellikle büyük boyutlu dosyalar aktarıyorsanız ve şebeke kesintisinin ya da başka bir iletimin yüksek olduğunu gösterir. Ayrıca, ağ arızası durumunda bant genişliği kullanımınızı da azaltabilir. çünkü büyük dosya yüklemelerini baştan başlatmanız gerekmez.

ResumableMediaUpload

Devam Ettirilebilir Medya Yükleme, Google API .NET istemci kitaplığında mevcut bir özelliktir 1.2.0-beta sürümünden itibaren geçerlidir. Google API'ye özel kitaplıklar, bu özellikle etkileşimde bulunabilirsiniz.

Devam ettirilebilir medya yükleme protokolü, örneğin Drive API için medya yükleme sayfasına gidin. Ana ilgi alanı ResumableUpload. Bu uygulamada, medya içeriği parçalar halinde yüklenir.

Varsayılan yığın boyutu 10 MB'tır, ancak istekteki ChunkSize özelliğinin 256 KB'lık herhangi bir katı olarak ayarlanması gerekir. İstekte bir sunucu hatasıyla karşılaşılırsa eksponansiyel geri yükleme politikası, başarıyla yüklenmeyen baytları yeniden göndermek için kullanılır. Varsayılan olarak her istemci isteği için eksponansiyel geri yükleme etkindir. Yeni bir URL oluştururken varsayılan davranışı yeni bir hizmet nesnesini BaseClientService.Initializer tarihinde DefaultExponentialBackOffPolicy mülkü ve/veya HttpClientInitializer özelliğini kullanarak IConfigurableHttpClientInitializer geri çekilme politikası ekler.

Medya yüklemeyi destekleyen yöntemler, referans belgelerde bulabilirsiniz. Bu API yöntemlerinde Upload ve UploadAsync yöntem eklendi. Bu yöntemlerde yükleme için Stream ve parametre olarak içerik türü gerekir.

Yüklediğiniz akışın konumunun 0 olduğundan emin olun. Aksi takdirde şunun gibi bir hata alırsınız: "System.InvalidOperationException: Belirtilen başlık bulunamadı".

Çerçevenin HttpClient davranışı nedeniyle sınıfı, yükleme zaman aşımına uğrarsa bir TaskCanceledException atılır. Bu istisnayı görürseniz Timeout mülkünü hizmet nesneniz tarafından kullanılan istemciyi tanımlar.

Örnek Kod

// 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");