Tài liệu này mô tả cách sử dụng tính năng tải lên trực tiếp và tiếp nối bằng Thư viện ứng dụng Java cho API của Google.
Tải nội dung nghe nhìn tiếp tục lên
Khi bạn tải một tệp phương tiện lớn lên máy chủ, hãy sử dụng tính năng tải lên phương tiện có thể tiếp tục để gửi tệp phương tiện theo từng phần. Các thư viện do Google API tạo chứa các phương thức thuận tiện để tương tác với tính năng tải nội dung đa phương tiện có thể tiếp tục lại.
Giao thức tải lên nội dung nghe nhìn có thể tiếp tục tương tự như giao thức tải lên nội dung đa phương tiện có thể tiếp tụ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 cho thấy cách hoạt động của giao thức tải nội dung nghe nhìn có thể tiếp tục lại:
Chi tiết triển khai
Các lớp quan tâm chính là MediaHttpUploader và MediaHttpProgressListener.
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 tham số mediaUpload
trong tài liệu Khám phá, thì một phương thức thuận tiện sẽ được tạo cho các phương thức này và 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á của các API của Google, hãy xem phần 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 lên nội dung nghe nhìn có thể tiếp tục mà không cần các thư viện được tạo 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); }
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 đa phương tiện có thể tiếp tục đượ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 lên nội dung phương tiện trực tiếp, ví dụ như nếu bạn đang tải một tệp nhỏ lên. Tính năng tải lên trực tiếp nội dung đa phương tiện trực tiếp được giới thiệu trong phiên bản 1.9.0 beta của Thư viện ứng dụng Java cho API của Google.
Phương thức tải lên phương tiện trực tiếp 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 phương tiện có thể tiếp tục lại cho phép tải tệp lên theo nhiều yêu cầu. Việc tải lên trực tiếp sẽ 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 các yêu cầu tải lên lớn.
Cách sử dụng để tải nội dung nghe nhìn trực tiếp lên giống như nội dung mô tả ở trên để tải nội dung nghe nhìn có thể tiếp tục lên, cùng với lệnh gọi MediaHttpUploader chỉ cho phép tải lên trực tiếp:
mediaHttpUploader.setDirectUploadEnabled(true);