Upload Media

Beberapa metode API mendukung upload media selain isi reguler. Dalam hal ini, metode permintaan reguler kelebihan beban untuk mendapatkan Stream tambahan yang akan diupload.

Ringkasan

Untuk setiap Stream yang ingin diupload, Anda harus menggunakan upload media yang dapat dilanjutkan, yang memungkinkan streaming diupload dalam potongan yang lebih kecil. Hal ini sangat berguna jika Anda mentransfer file besar, dan kemungkinan gangguan jaringan atau beberapa kegagalan transmisi lainnya tinggi. Tindakan ini juga dapat mengurangi penggunaan bandwidth jika terjadi kegagalan jaringan, karena Anda tidak perlu memulai ulang upload file berukuran besar dari awal.

ResumableMediaUpload

Upload Media yang Dapat Dilanjutkan telah menjadi fitur dalam 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, pada halaman upload media untuk Drive API. Class minat utama adalah ResumableUpload. Dalam implementasi ini, konten media diupload dalam potongan-potongan.

Ukuran potongan default adalah 10 MB, tetapi Anda dapat mengubahnya dengan menetapkan properti ChunkSize pada permintaan ke kelipatan 256 KB. Jika terjadi error server 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 default saat membuat objek layanan baru dengan mengubah properti DefaultExponentialBackOffPolicy di BaseClientService.Initializer dan/atau menetapkan properti HttpClientInitializer 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 yang mudah 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: The used header was not found".

Perlu diketahui bahwa karena perilaku class HttpClient framework, jika waktu upload habis, TaskCanceledException akan ditampilkan. Jika Anda melihat pengecualian ini, pertimbangkan untuk meningkatkan properti Timeout secara manual pada klien yang digunakan oleh objek layanan Anda.

Contoh Kode

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