เมื่อดาวน์โหลดไฟล์สื่อขนาดใหญ่จากเซิร์ฟเวอร์ ให้ใช้ ดาวน์โหลดสื่อต่อได้เพื่อดาวน์โหลดไฟล์ทีละส่วน Google API ไลบรารีที่สร้างขึ้นมีวิธีการอำนวยความสะดวกในการโต้ตอบกับระบบที่ดำเนินการต่อได้ ดาวน์โหลดสื่อ
โปรโตคอลการดาวน์โหลดสื่อที่กลับมาทำงานต่อได้จะคล้ายกับการอัปโหลดสื่อที่ดำเนินการต่อได้ ซึ่งอธิบายไว้ใน เอกสารประกอบของ Google Drive API
รายละเอียดการใช้งาน
คลาสหลักๆ ที่สนใจคือ MediaHttpDownloader และ MediaHttpDownloaderProgressListener เนื้อหาสื่อจะมีการดาวน์โหลดเป็นส่วนๆ และสามารถกำหนดค่าขนาดกลุ่มได้ หากมี พบข้อผิดพลาดของเซิร์ฟเวอร์ในคำขอ จากนั้นจะมีการส่งคำขออีกครั้ง
หากเมธอดในไลบรารีที่สร้างขึ้นเฉพาะบริการสนับสนุนการดาวน์โหลดใน เอกสารการค้นพบ ตามด้วย จะมีการสร้างวิธีการดาวน์โหลดที่สะดวกขึ้นสำหรับวิธีการเหล่านี้ที่จะต้องใช้ OutputStream (สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้การดาวน์โหลดสื่อกับบริการค้นพบ API ของ Google โปรดดู การดาวน์โหลดสื่อ)
เช่น
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);
นอกจากนี้ คุณยังใช้ฟีเจอร์นี้ได้โดยไม่ต้องมีไลบรารีที่สร้างขึ้นเฉพาะบริการ มีตัวอย่างดังต่อไปนี้
OutputStream out = new FileOutputStream("/tmp/Test.jpg");
MediaHttpDownloader downloader = new MediaHttpDownloader(transport, httpRequestInitializer);
downloader.setProgressListener(new CustomProgressListener());
downloader.download(requestUrl, out);
การดาวน์โหลดสื่อโดยตรง
การดาวน์โหลดสื่อที่ดำเนินการต่อได้จะเปิดไว้โดยค่าเริ่มต้น แต่คุณสามารถปิดและใช้ ดาวน์โหลดสื่อโดยตรงแทน เช่น ในกรณีที่คุณดาวน์โหลดไฟล์ขนาดเล็ก เริ่มเปิดตัวการดาวน์โหลดสื่อโดยตรงใน 1.9.0-beta ไลบรารีของไคลเอ็นต์ Google API เวอร์ชันสำหรับ Java
การดาวน์โหลดสื่อโดยตรงจะดาวน์โหลดเนื้อหาสื่อทั้งเนื้อหาในคำขอ HTTP รายการเดียว เช่น ตรงข้ามกับโปรโตคอลการดาวน์โหลดสื่อที่กลับมาทำงานต่อได้ ซึ่งดาวน์โหลดได้ คำขอ การดาวน์โหลดโดยตรงจะลดจำนวนคำขอ HTTP แต่ เพิ่มโอกาสในการทำงานล้มเหลว (เช่น การเชื่อมต่อล้มเหลว) ซึ่งเกิดขึ้นได้ ด้วยการดาวน์โหลดขนาดใหญ่
การใช้งานจะเหมือนกับที่ระบุข้างต้น รวมทั้งรายการต่อไปนี้ การโทรที่บอก MediaHttpDownloader ให้ดาวน์โหลดโดยตรง
mediaHttpDownloader.setDirectDownloadEnabled(true);