Download di contenuti multimediali ripristinabili

Quando scarichi un file multimediale di grandi dimensioni da un server, utilizza il download di contenuti multimediali ripristinabili per scaricare il blocco di file per blocco. Le librerie generate dall'API di Google contengono metodi pratici per interagire con il download di contenuti multimediali ripristinabile.

Il protocollo per il download di contenuti multimediali ripristinabile è simile al protocollo di caricamento multimediale ripristinabile, descritto nella documentazione dell'API Google Drive.

Dettagli di implementazione

Le classi principali di interesse sono MediaHttpDownloader e MediaHttpDownloaderProgressListener. I contenuti multimediali vengono scaricati in blocchi e le dimensioni del blocco sono configurabili. Se si verifica un errore del server in una richiesta, la richiesta viene ripetuta.

Se i metodi nelle librerie generate specifiche per il servizio supportano il download nel documento di rilevamento, per questi metodi viene creato un pratico metodo di download che include un OutputStream. Per ulteriori informazioni sull'utilizzo del download di contenuti multimediali con Google APIs Discovery Service, consulta Download di contenuti multimediali.

Ad esempio:

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

Puoi utilizzare questa funzionalità anche senza librerie generate specifiche per i servizi. Ecco un esempio:

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

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

Download diretto di contenuti multimediali

Il download di contenuti multimediali ripristinabile è abilitato per impostazione predefinita, ma puoi disattivarlo e utilizzare il download diretto dei contenuti multimediali, ad esempio se stai scaricando un file di piccole dimensioni. Il download diretto dei contenuti multimediali è stato introdotto nella versione 1.9.0-beta della libreria client dell'API di Google per Java.

Il download diretto dei contenuti multimediali scarica l'intero contenuto multimediale in un'unica richiesta HTTP, diversamente dal protocollo per il download di contenuti multimediali ripristinabile, che può essere scaricato in più richieste. Eseguire un download diretto riduce il numero di richieste HTTP, ma aumenta la possibilità di errori (ad esempio errori di connessione) che possono verificarsi con download di grandi dimensioni.

L'utilizzo è lo stesso descritto sopra, oltre alla seguente chiamata che indica a MediaHttpDownloader di eseguire download diretti:

mediaHttpDownloader.setDirectDownloadEnabled(true);