支援續傳的媒體下載

從伺服器下載大型媒體檔案時,使用可繼續媒體下載來按照區塊下載檔案區塊。Google API 產生的程式庫包含方便與可繼續媒體下載作業的便利方法。

可繼續的媒體下載通訊協定與 Google Drive API 說明文件中所述的可重新啟用媒體上傳通訊協定類似。

實作詳情

感興趣的主要類別為 MediaHttpDownloaderMediaHttpDownloaderProgressListener。媒體內容會以區塊為單位下載,而區塊大小可設定。如果要求發生伺服器錯誤,則會重試要求。

如果服務專屬程式庫中的方法支援探索文件中的下載功能,則系統會為採用 OutputStream 中的方法建立便利的下載方法。如要進一步瞭解如何搭配 Google API 探索服務使用媒體下載,請參閱媒體下載一文。

例如:

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

直接下載媒體

支援續傳的媒體下載功能預設為啟用,但您可以停用該模式,改為使用直接媒體下載功能 (例如下載小型檔案時)。 直接媒體下載是在 Java 適用的 Google API 用戶端程式庫 1.9.0-beta 版本中推出。

直接媒體下載作業可透過單一 HTTP 要求下載整個媒體內容,這點與可繼續執行媒體下載通訊協定不同,後者支援多個要求。直接下載會減少 HTTP 要求數量,但會增加大型下載作業失敗 (例如連線失敗) 的機會。

使用方式與上述內容相同,再加上下列呼叫指示 MediaHttpDownloader 執行直接下載:

mediaHttpDownloader.setDirectDownloadEnabled(true);