Khi bạn tải một tệp phương tiện lớn xuống từ máy chủ, hãy sử dụng tính năng tải nội dung đa phương tiện có thể tiếp tục xuống để tải tệp theo từng phần. 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 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.
Chi tiết triển khai
Các lớp quan tâm chính là MediaHttpDownloader và MediaHttpDownloaderProgressListener. Nội dung đa phương tiện được tải xuống theo từng phần và kích thước của phần có thể định cấu hình. Nếu xảy ra lỗi máy chủ trong một yêu cầu, thì yêu cầu đó sẽ được thử lại.
Nếu các phương thức trong thư viện tạo riêng cho từng dịch vụ hỗ trợ tải xuống trong tài liệu về Khám phá, thì hệ thống sẽ tạo một phương thức tải xuống thuận tiện cho các phương thức này trong OutputStream. (Để biết thêm về cách sử dụng tính năng tải nội dung đa phương tiện xuống bằng Dịch vụ khám phá API của Google, hãy xem phần Tải nội dung nghe nhìn xuống.)
Ví dụ:
class CustomProgressListener implements MediaHttpDownloaderProgressListener {
public void progressChanged(MediaHttpDownloader downloader) {
switch (downloader.getDownloadState()) {
case MEDIA_IN_PROGRESS:
System.out.println(downloader.getProgress());
break;
case MEDIA_COMPLETE:
System.out.println("Download is complete!");
}
}
}
OutputStream out = new FileOutputStream("/tmp/driveFile.jpg");
DriveFiles.Get request = drive.files().get(fileId);
request.getMediaHttpDownloader().setProgressListener(new CustomProgressListener());
request.executeMediaAndDownloadTo(out);
Bạn cũng có thể sử dụng tính năng này mà không cần các thư viện được tạo theo dịch vụ. Dưới đây là ví dụ:
OutputStream out = new FileOutputStream("/tmp/Test.jpg");
MediaHttpDownloader downloader = new MediaHttpDownloader(transport, httpRequestInitializer);
downloader.setProgressListener(new CustomProgressListener());
downloader.download(requestUrl, out);
Tải nội dung nghe nhìn trực tiếp xuống
Theo mặc định, tính năng tải nội dung đa phương tiện có thể tiếp tục lại được bật nhưng bạn có thể tắt tính năng này và sử dụng tính năng tải xuống nội dung phương tiện trực tiếp, ví dụ như khi bạn đang tải một tệp nhỏ xuống. Tính năng tải nội dung nghe nhìn trực tiếp xuống đã được ra mắt trong phiên bản 1.9.0 beta của Thư viện ứng dụng Java cho API của Google.
Việc tải nội dung đa phương tiện trực tiếp xuống sẽ tải toàn bộ nội dung phương tiện xuống trong một yêu cầu HTTP, trái ngược với giao thức tải nội dung nghe nhìn có thể tiếp tục có thể tải xuống trong nhiều yêu cầu. Việc tải xuống 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 tệp tải xuống lớn.
Cách sử dụng giống như nội dung mô tả ở trên, ngoài ra còn có lệnh gọi sau đây để yêu cầu MediaHttpDownloader thực hiện việc tải xuống trực tiếp:
mediaHttpDownloader.setDirectDownloadEnabled(true);