การดาวน์โหลดสื่อที่ดําเนินการต่อได้

เมื่อดาวน์โหลดไฟล์สื่อขนาดใหญ่จากเซิร์ฟเวอร์ ให้ใช้การดาวน์โหลดสื่อที่ดําเนินการต่อได้เพื่อดาวน์โหลดไฟล์ทีละไฟล์ ไลบรารีที่สร้างขึ้นสําหรับ Google API มีวิธีอํานวยความสะดวกในการโต้ตอบกับการดาวน์โหลดสื่อที่ดําเนินการต่อได้

โปรโตคอลการดาวน์โหลดสื่อที่ดําเนินการต่อได้คล้ายคลึงกับโปรโตคอลการอัปโหลดสื่อที่ดําเนินการต่อได้ ซึ่งอธิบายไว้ในเอกสารประกอบของ Google ไดรฟ์ API

รายละเอียดการใช้งาน

คลาสหลักๆ ที่สนใจคือ MediaHttpDownloader และ MediaHttpDownloaderProgressListener โดยระบบจะดาวน์โหลดเนื้อหาสื่อเป็นส่วนๆ และขนาดกลุ่มสามารถกําหนดค่าได้ หากพบข้อผิดพลาดของเซิร์ฟเวอร์ในคําขอ ระบบจะส่งคําขออีกครั้ง

หากเมธอดในไลบรารีที่สร้างขึ้นเฉพาะบริการรองรับการดาวน์โหลดในเอกสารการค้นพบ ระบบจะสร้างวิธีการดาวน์โหลดที่สะดวกสําหรับวิธีการเหล่านี้ไว้ใน outputStream (สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้การดาวน์โหลดสื่อด้วยบริการ Google APIs Discovery โปรดดูการดาวน์โหลดสื่อ)

เช่น

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

การดาวน์โหลดสื่อโดยตรง

ระบบจะเปิดใช้การดาวน์โหลดสื่อที่ดําเนินการต่อได้โดยค่าเริ่มต้น แต่คุณปิดใช้และใช้การดาวน์โหลดสื่อโดยตรงแทนได้ เช่น ในกรณีที่ดาวน์โหลดไฟล์ขนาดเล็ก เราได้เปิดตัวการดาวน์โหลดสื่อโดยตรงในไลบรารีของไคลเอ็นต์ Google API เวอร์ชัน 1.9.0-เบต้า สําหรับ Java

การดาวน์โหลดสื่อโดยตรงจะดาวน์โหลดเนื้อหาสื่อทั้งหมดในคําขอ HTTP รายการเดียว ตรงข้ามกับโปรโตคอลการดาวน์โหลดสื่อที่ต่อได้ ซึ่งดาวน์โหลดได้ในคําขอหลายรายการ การดาวน์โหลดโดยตรงจะลดจํานวนคําขอ HTTP แต่จะทําให้มีโอกาสเกิดความล้มเหลวมากขึ้น (เช่น ความล้มเหลวในการเชื่อมต่อ) ที่อาจเกิดขึ้นกับการดาวน์โหลดขนาดใหญ่

การใช้งานเหมือนกับที่อธิบายไว้ข้างต้น รวมถึงการเรียกที่บอกให้ MediaHttpDownloader ดาวน์โหลดโดยตรง

mediaHttpDownloader.setDirectDownloadEnabled(true);