Beberapa metode API mendukung upload media selain isi biasa.
Dalam hal ini, metode permintaan reguler akan dioverload untuk mendapatkan Stream
tambahan yang akan diupload.
Ringkasan
Untuk Stream
yang ingin diupload, Anda harus menggunakan upload media yang dapat dilanjutkan, yang memungkinkan streaming diupload dalam bagian yang lebih kecil.
Ini sangat berguna jika Anda
mentransfer file besar,
dan kemungkinan gangguan jaringan
atau beberapa transmisi lainnya
tingkat kegagalannya tinggi.
Hal ini juga dapat mengurangi penggunaan bandwidth Anda jika terjadi kegagalan jaringan
karena Anda tidak perlu memulai ulang upload file besar dari awal.
ResumableMediaUpload
Upload Media yang Dapat Dilanjutkan telah menjadi fitur di library klien .NET Google API sejak versi 1.2.0-beta. Library khusus Google API berisi metode praktis untuk berinteraksi dengan fitur ini.
Protokol upload media yang dapat dilanjutkan dijelaskan, misalnya, di
halaman upload media untuk Drive API.
Class utama yang diminati adalah
ResumableUpload
.
Dalam implementasi ini, konten media diupload dalam potongan.
Ukuran bagian default adalah 10 MB, tetapi Anda dapat mengubahnya dengan
menetapkan properti ChunkSize
pada permintaan ke kelipatan 256 KB.
Jika error server terjadi dalam permintaan, kebijakan backoff eksponensial
akan digunakan untuk mengirim ulang byte yang tidak berhasil diupload.
Secara default, backoff eksponensial diaktifkan untuk setiap permintaan klien.
Anda dapat mengubah perilaku {i>default<i} saat membuat
objek layanan baru dengan mengubah
Properti DefaultExponentialBackOffPolicy
di BaseClientService.Initializer
dan/atau menetapkan
HttpClientInitializer
properti ke implementasi IConfigurableHttpClientInitializer
Anda sendiri
yang menambahkan beberapa kebijakan backoff.
Metode yang mendukung upload media diidentifikasi
dalam dokumentasi referensi untuk dokumentasi khusus API.
Untuk metode API ini, metode Upload
dan
UploadAsync
praktis ditambahkan.
Metode tersebut menggunakan Stream
untuk diupload dan jenis kontennya sebagai parameter.
Pastikan posisi streaming yang Anda upload adalah 0. Jika tidak, Anda akan menerima error, seperti "System.InvalidOperationException: Header yang diberikan tidak ditemukan".
Perlu diperhatikan bahwa karena perilaku HttpClient
framework
jika waktu upload habis, TaskCanceledException
akan ditampilkan.
Jika Anda melihat pengecualian ini, sebaiknya tingkatkan properti Timeout
secara manual di
klien yang digunakan oleh objek layanan Anda.
Kode Contoh
// 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");