可续传媒体下载

从服务器下载大型媒体文件时,请使用 可续传媒体下载:用于逐块下载文件。Google API 生成的库包含与可续传对象进行交互的便捷方法 下载媒体内容。

可续传媒体下载协议类似于可续传媒体上传 协议,这在 Google Drive API 文档

实现细节

主要的类是 MediaHttpDownloaderMediaHttpDownloaderProgressListener。 媒体内容以分块的形式下载,分块大小可配置。如果 请求遇到服务器错误,则会重试该请求。

如果服务专属生成的库中的方法支持下载 发现文档,然后点按 我们针对这些方法创建了一种便捷的下载方法, OutputStream。 (有关将媒体下载与 Google API 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);

直接下载媒体

可续传媒体下载功能默认处于启用状态,但您可以将其停用,然后使用 直接下载媒体,例如,下载小文件。 直接下载媒体自 1.9.0-beta 适用于 Java 的 Google API 客户端库。

直接媒体下载通过一个 HTTP 请求下载全部媒体内容,例如 这与可续传媒体下载协议不同 请求。直接下载可减少 HTTP 请求数量 增加了发生故障(例如连接故障)的几率 下载大量内容。

用法与上述用法相同,此外还要注意以下几点: 一个调用, MediaHttpDownloader 直接下载:

mediaHttpDownloader.setDirectDownloadEnabled(true);