Khi bạn tải một tệp đa phương tiện lớn xuống từ máy chủ, hãy sử dụng tải nội dung nghe nhìn có thể tiếp tục xuống để tải từng đoạn tệp xuống. API của Google các thư viện được tạo chứa các phương thức tiện lợi để tương tác với các phần tử có thể tiếp tục tải nội dung nghe nhìn xuống.
Giao thức tải nội dung nghe nhìn có thể tiếp tục tương tự như quá trình tải nội dung nghe nhìn lên tiếp nối được mô tả trong phần Tài liệu về API Google Drive.
Chi tiết triển khai
Các lớp chính mà bạn quan tâm là MediaHttpDownloader và MediaHttpDownloaderProgressListener. Nội dung đa phương tiện được tải xuống theo từng phần và có thể định cấu hình kích thước phân đoạn. Nếu một gặp phải lỗi máy chủ trong 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 được tạo dành riêng cho dịch vụ hỗ trợ tải xuống trong Discovery document, sau đó là có thể sử dụng phương thức tải xuống thuận tiện cho các phương thức này lấy dữ liệu OutputStream. (Để biết thêm về cách sử dụng tính năng tải xuống phương tiện bằng Dịch vụ khám phá API của Google, hãy xem 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 dành riêng cho từng 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
Tính năng tải 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 xuống nội dung nghe nhìn trực tiếp, ví dụ: nếu 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 giới thiệu trong 1.9.0-beta phiên bản Thư viện ứng dụng API của Google dành cho Java.
Tải xuống phương tiện trực tiếp sẽ tải xuống toàn bộ nội dung phương tiện trong một yêu cầu HTTP, dưới dạng trái ngược với giao thức tải xuống phương tiệ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ẽ 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 các tệp tải xuống kích thước lớn.
Cách sử dụng này giống như mô tả ở trên, cộng với các cuộc gọi cho biết MediaHttpDownloader để tải xuống trực tiếp:
mediaHttpDownloader.setDirectDownloadEnabled(true);