Ả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ẽ được nạp chồng để lấy thêm một Stream để tải lên.

Tổng quan

Đối với mọi Stream 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 có thể tiếp nối. Tính năng này cho phép tải luồng lên theo các phần nhỏ hơ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à khả năng gián đoạn mạng hoặc một số hoạt động truyền khác lỗi ở mức cao. Trình quản lý này cũng có thể giúp giảm mức sử dụng băng thông trong trường hợp xảy ra sự cố 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

Tính năng Tải nội dung nghe nhìn có thể tiếp tục đã là một tính năng trong thư viện ứng dụng Google API .NET kể từ phiên bản 1.2.0-beta. Thư viện dành riêng cho API của Google 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 lên nội dung nghe nhìn có thể tiếp tục đượ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 cách triển khai này, nội dung đa phương tiện được tải lên theo từng phần.

Kích thước phân đoạn mặc định là 10MB, nhưng bạn có thể thay đổi kích thước này bằng đặt thuộc tính ChunkSize trên yêu cầu thành bội số của 256KB bất kỳ. Nếu gặp lỗi máy chủ trong một 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 không được tải lên thành công. Theo mặc định, tính năng thời gian đợi tăng theo cấp 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 một đố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 HttpClientInitializer với hoạt động triển khai IConfigurableHttpClientInitializer của riêng bạn để thêm một số chính sách thời gian đợi.

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

Đảm bảo rằng vị trí của luồng bạn tải lên là 0, nếu không, bạn sẽ nhận được lỗi, chẳng hạn như "System.InvalidOperationException: The given header was not found" (System.InvalidOperationException: Không tìm thấy tiêu đề đã cho).

Xin lưu ý rằng do hành vi của HttpClient của khung nếu quá trình tải lên hết thời gian chờ, thì hệ thống sẽ gửi TaskCanceledException. Nếu bạn thấy trường hợp 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");