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