支援續傳的媒體下載功能

從伺服器下載大型媒體檔案時,請使用可續傳的媒體下載功能,將檔案區塊切割。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);