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

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

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

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

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

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

เช่น

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 สำหรับ Java เวอร์ชัน 1.9.0-beta

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

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

mediaHttpDownloader.setDirectDownloadEnabled(true);