Downloads de mídia retomáveis

Ao fazer o download de um arquivo de mídia grande de um servidor, use o download de mídia retomável para transferir o arquivo fragmentado. As bibliotecas geradas pela API do Google contêm métodos convenientes para interagir com o download de mídia retomável.

O protocolo de download de mídia retomável é semelhante ao protocolo de upload de mídia retomável, descrito na documentação da API Google Drive.

Detalhes da implementação

As principais classes de interesse são MediaHttpDownloader e MediaHttpDownloaderProgressListener. O conteúdo de mídia é baixado em partes, e o tamanho do bloco é configurável. Se um erro de servidor for encontrado em uma solicitação, ela será repetida.

Se os métodos nas bibliotecas geradas específicas do serviço permitirem o download no documento de descoberta, um método de download conveniente será criado para esses métodos e receberá um OutputStream. Para saber mais sobre como usar o download de mídia com o serviço de descoberta de APIs do Google, consulte Download de mídia.

Exemplo:

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

Também é possível usar esse recurso sem bibliotecas geradas específicas do serviço. Confira um exemplo:

OutputStream out = new FileOutputStream("/tmp/Test.jpg");

MediaHttpDownloader downloader = new MediaHttpDownloader(transport, httpRequestInitializer);
downloader.setProgressListener(new CustomProgressListener());
downloader.download(requestUrl, out);

Download direto de mídia

O download de mídia retomável é ativado por padrão, mas é possível desativá-lo e usar o download direto de mídia, por exemplo, se você estiver fazendo o download de um arquivo pequeno. O download direto de mídia foi introduzido na versão 1.9.0-beta da biblioteca de cliente da API do Google para Java.

O download direto de mídia faz o download de todo o conteúdo de mídia em uma solicitação HTTP, em vez do protocolo de download de mídia retomável, que pode ser transferido em várias solicitações. Fazer um download direto reduz o número de solicitações HTTP, mas aumenta a chance de falhas (como falhas de conexão) que podem acontecer com downloads grandes.

O uso é o mesmo descrito acima, além da seguinte chamada que instrui o MediaHttpDownloader a fazer downloads diretos:

mediaHttpDownloader.setDirectDownloadEnabled(true);