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