ดาวน์โหลดสื่อที่กลับมาเล่นต่อได้

เมื่อดาวน์โหลดไฟล์สื่อขนาดใหญ่จากเซิร์ฟเวอร์ ให้ใช้ ดาวน์โหลดสื่อต่อได้เพื่อดาวน์โหลดไฟล์ทีละส่วน 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);