Medya Yükleme

Bazı API yöntemleri, normal bir gövdeye ek olarak medya yüklemeyi 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 özelliği, 1.2.0-beta sürümünden beri Google API .NET istemci kitaplığında mevcuttur. Google API'ye özel kitaplıklar, bu özellikle etkileşimde bulunabilirsiniz.

Devam ettirilebilir medya yükleme protokolü, örneğin Drive API'nin medya yükleme sayfasında açıklanmaktadır. İlgilenilen ana sınıf ResumableUpload. Bu uygulamada, medya içeriği parçalar halinde yüklenir.

Varsayılan parça boyutu 10 MB'tır ancak istekteki ChunkSize mülkünü 256 KB'nın herhangi bir katına ayarlayarak bu boyutu değiştirebilirsiniz. İ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 üstel geri yükleme etkindir. Yeni bir hizmet nesnesi oluştururken BaseClientService.Initializer üzerinde DefaultExponentialBackOffPolicy mülkünü değiştirerek ve/veya HttpClientInitializer mülkünü, geri çekilme politikası ekleyen kendi IConfigurableHttpClientInitializer uygulamanıza ayarlayarak varsayılan davranışı değiştirebilirsiniz.

Medya yüklemeyi destekleyen yöntemler, referans dokümanlarda bulabilirsiniz. Bu API yöntemleri için kolaylık Upload ve UploadAsync yöntemleri eklenir. 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üyorsanız hizmet nesneniz tarafından kullanılan istemcide Timeout özelliğini manuel olarak artırabilirsiniz.

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