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