Tải lên nội dung nghe nhìn trực tiếp và có thể tiếp tục

Tài liệu này mô tả cách sử dụng tính năng tải nội dung nghe nhìn lên trực tiếp và tiếp nối được bằng Thư viện ứng dụng API của Google cho Java.

Nội dung nghe nhìn tải lên có thể tiếp tục

Khi bạn tải một tệp nội dung nghe nhìn có dung lượng lớn lên máy chủ, hãy sử dụng tính năng tải nội dung nghe nhìn tiếp nối lên để gửi tệp từng phần. Các thư viện do Google API tạo chứa các phương thức tiện lợi để tương tác với quá trình tải nội dung nghe nhìn lên có thể tiếp tục.

Giao thức tải nội dung nghe nhìn lên tiếp nối tương tự như giao thức tải nội dung nghe nhìn tiếp nối lên được mô tả trong tài liệu về API Google Drive.

Thiết kế giao thức

Sơ đồ trình tự sau đây cho biết cách hoạt động của giao thức tải nội dung nghe nhìn có thể tiếp nối lên:
Sơ đồ trình tự cho thấy cách các yêu cầu và phản hồi di chuyển giữa ứng dụng và máy chủ.

Thông tin triển khai

Các lớp được quan tâm chính là MediaHttpUploaderMediaHttpProgressListener.

Nếu các phương thức trong thư viện được tạo dành riêng cho dịch vụ chứa tham số mediaUpload trong Tài liệu khám phá, thì một phương thức tiện lợi sẽ được tạo cho các phương thức này để lấy InputStreamContent làm tham số. (Để biết thêm về cách sử dụng tính năng tải nội dung nghe nhìn lên bằng dịch vụ Khám phá API của Google, hãy xem bài viết Tải nội dung nghe nhìn lên.)

Ví dụ: phương thức insert của API Drive hỗ trợ mediaUpload và bạn có thể sử dụng mã sau để tải tệp lên:

class CustomProgressListener implements MediaHttpUploaderProgressListener {
  public void progressChanged(MediaHttpUploader uploader) throws IOException {
    switch (uploader.getUploadState()) {
      case INITIATION_STARTED:
        System.out.println("Initiation has started!");
        break;
      case INITIATION_COMPLETE:
        System.out.println("Initiation is complete!");
        break;
      case MEDIA_IN_PROGRESS:
        System.out.println(uploader.getProgress());
        break;
      case MEDIA_COMPLETE:
        System.out.println("Upload is complete!");
    }
  }
}

File mediaFile = new File("/tmp/driveFile.jpg");
InputStreamContent mediaContent =
    new InputStreamContent("image/jpeg",
        new BufferedInputStream(new FileInputStream(mediaFile)));
mediaContent.setLength(mediaFile.length());

Drive.Files.Insert request = drive.files().insert(fileMetadata, mediaContent);
request.getMediaHttpUploader().setProgressListener(new CustomProgressListener());
request.execute();

Bạn cũng có thể sử dụng tính năng tải nội dung nghe nhìn lên tiếp nối mà không cần các thư viện được tạo dành riêng cho dịch vụ. Dưới đây là ví dụ:

File mediaFile = new File("/tmp/Test.jpg");
InputStreamContent mediaContent =
    new InputStreamContent("image/jpeg",
        new BufferedInputStream(new FileInputStream(mediaFile)));
mediaContent.setLength(mediaFile.length());

MediaHttpUploader uploader = new MediaHttpUploader(mediaContent, transport, httpRequestInitializer); uploader.setProgressListener(new CustomProgressListener()); HttpResponse response = uploader.upload(requestUrl); if (!response.isSuccessStatusCode()) { throw GoogleJsonResponseException(jsonFactory, response); }

Trực tiếp tải nội dung nghe nhìn lên

Tính năng tải nội dung nghe nhìn tiếp nối được bật theo mặc định. Tuy nhiên, bạn có thể tắt tính năng này và sử dụng tính năng tải nội dung nghe nhìn trực tiếp lên, chẳng hạn như khi bạn tải một tệp nhỏ lên. Tính năng tải nội dung nghe nhìn trực tiếp lên được ra mắt trong phiên bản 1.9.0-beta của Thư viện ứng dụng API của Google cho Java.

Tính năng tải nội dung nghe nhìn trực tiếp sẽ tải toàn bộ tệp lên trong một yêu cầu HTTP, thay vì giao thức tải nội dung nghe nhìn tiếp nối lên (sẽ tải tệp lên trong nhiều yêu cầu). Việc tải lên trực tiếp làm giảm số lượng yêu cầu HTTP nhưng làm tăng khả năng lỗi (chẳng hạn như lỗi kết nối) có thể xảy ra với những tệp tải lên có kích thước lớn.

Cách sử dụng tính năng tải nội dung nghe nhìn trực tiếp lên cũng giống như cách mô tả ở trên đối với việc tải nội dung nghe nhìn tiếp nối lên, cộng với lệnh gọi sau đây sẽ yêu cầu MediaHttpUploader chỉ tải nội dung lên trực tiếp:

mediaHttpUploader.setDirectUploadEnabled(true);