Ảnh/video bạn đã tải lên

Một số phương thức API hỗ trợ việc tải nội dung nghe nhìn lên ngoài nội dung thông thường. Trong trường hợp đó, phương thức yêu cầu thông thường sẽ bị nạp chồng để lấy thêm Stream nhằm tải lên.

Tổng quan

Đối với bất kỳ Stream nào mà bạn muốn tải lên, bạn nên sử dụng tính năng tải lên nội dung nghe nhìn tiếp nối. Tính năng này cho phép các luồng nhỏ hơn được tải lên. Điều này đặc biệt hữu ích nếu bạn đang chuyển các tệp lớn và có nguy cơ cao bị gián đoạn mạng hoặc một số lỗi truyền khác. Việc này cũng có thể làm giảm mức sử dụng băng thông trong trường hợp lỗi mạng vì bạn không phải bắt đầu lại quá trình tải tệp lớn lên từ đầu.

ResumableMediaUpload

Kể từ phiên bản 1 .2.0-beta, tính năng Tải lên nội dung nghe nhìn tiếp tục là một tính năng trong thư viện ứng dụng API.NET của Google. Các thư viện dành riêng cho API của Google có chứa các phương thức thuận tiện để tương tác với tính năng này.

Ví dụ: giao thức tải nội dung nghe nhìn lên tiếp nối được mô tả trên trang tải nội dung nghe nhìn lên cho API Drive. Lớp quan tâm chính là ResumableUpload. Trong phương thức triển khai này, nội dung nghe nhìn được tải lên theo từng phần.

Kích thước phân đoạn mặc định là 10 MB, nhưng bạn có thể thay đổi bằng cách đặt thuộc tính ChunkSize theo yêu cầu thành bội số bất kỳ của 256 KB. Nếu gặp lỗi máy chủ trong yêu cầu, thì chính sách thời gian đợi luỹ thừa sẽ được dùng để gửi lại các byte chưa được tải lên thành công. Theo mặc định, thuật toán thời gian đợi luỹ thừa được bật cho mỗi yêu cầu của ứng dụng. Bạn có thể thay đổi hành vi mặc định khi tạo đối tượng dịch vụ mới bằng cách thay đổi thuộc tính DefaultExponentialBackOffPolicy trên BaseClientService.Initializer và/hoặc đặt thuộc tính HttpClientInitializer thành cách triển khai IConfigurableHttpClientInitializer của riêng bạn nhằm thêm một số chính sách thời gian đợi.

Các phương thức hỗ trợ tải nội dung nghe nhìn lên được xác định trong tài liệu tham khảo cho tài liệu dành riêng cho API. Đối với các phương thức API này, chúng tôi sẽ thêm các phương thức UploadUploadAsync tiện lợi. Các phương thức này lấy Stream để tải lên và loại nội dung của nó làm tham số.

Đảm bảo vị trí của luồng bạn tải lên là 0, nếu không bạn sẽ gặp lỗi, chẳng hạn như "System.InvalidOperationException: Không tìm thấy tiêu đề đã cung cấp".

Xin lưu ý rằng do hành vi của lớp HttpClient của khung, nếu quá trình tải lên hết thời gian chờ, hệ thống sẽ trả về TaskCanceledException. Nếu bạn thấy ngoại lệ này, hãy cân nhắc việc tăng thuộc tính Timeout theo cách thủ công trong ứng dụng mà đối tượng dịch vụ của bạn sử dụng.

Mã mẫu

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