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 trực tiếp và có thể tiếp tục lên bằng Thư viện ứng dụng API của Google dành cho Java.

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

Khi bạn tải một tệp đa phương tiệ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 có thể tiếp tục lên để gửi phân đoạn tệp theo đoạn. Các thư viện do API của Google tạo chứa để tương tác với quá trình tải nội dung nghe nhìn có thể tiếp tục lên.

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

Thiết kế giao thức

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

Chi tiết triển khai

Các lớp 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ụ có chứa 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. Phương thức này sẽ lấy InputStreamContent dưới dạng 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 API của Google Dịch vụ khám phá, hãy xem 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 lên tệp:

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 thư viện đã tạo. Bạn có thể tham khảo ví dụ sau đây:

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); }

Tải nội dung nghe nhìn trực tiếp lên

Tính năng tải lên nội dung nghe nhìn có thể tiếp tục được bật theo mặc định, nhưng bạn có thể tắt tính năng này và sử dụng tải lên trực tiếp nội dung nghe nhìn, ví dụ: nếu bạn tải một tệp nhỏ lên. Trực tiếp tính năng tải nội dung đa phương tiện lên đã được giới thiệu trong phiên bản 1.9.0-beta phiên bản Thư viện ứng dụng API của Google dành cho Java.

Tính năng tải nội dung nghe nhìn trực tiếp lên 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 lên nội dung nghe nhìn có thể tiếp tục. Giao thức này sẽ tải tệp lên theo nhiều yêu cầu. Việc tải lên trực tiếp giúp 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 video tải 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 sử dụng tính năng mô tả ở trên cho quá trình tải nội dung nghe nhìn có thể tiếp tục lên, cùng với lệnh gọi sau đây để cho MediaHttpUploader biết để chỉ tải lên trực tiếp:

mediaHttpUploader.setDirectUploadEnabled(true);