Quando scarichi un file multimediale di grandi dimensioni da un server, utilizza il download multimediale ripristinabile per scaricare il blocco di file in base al blocco. Le librerie generate dall'API di Google contengono metodi pratici per interagire con il download dei contenuti multimediali ripristinabile.
Il protocollo per il download dei media ripristinabile è simile al protocollo per il caricamento dei media ripristinabile, descritto nella documentazione relativa all'API Google Drive.
Dettagli di implementazione
Le classi di interesse principali sono MediaHttpDownloader e MediaHttpDownloaderProgressListener. I contenuti multimediali vengono scaricati in blocchi e la dimensione dei blocchi è configurabile. Se si verifica un errore del server in una richiesta, viene eseguito un nuovo tentativo della richiesta.
Se i metodi nelle librerie generate specifiche per il servizio supportano il download nel documento di rilevamento, viene creato un metodo pratico per il download di questi metodi che utilizza un OutputStream. Per maggiori informazioni sull'utilizzo del download multimediale con il servizio Discovery API di Google, consulta Download multimediale.
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 il servizio. 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 dei contenuti multimediali
Il download di contenuti multimediali ripristinabile è abilitato per impostazione predefinita, ma puoi disattivarlo e utilizzare invece 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 delle API di Google per Java.
Il download diretto dei contenuti multimediali scarica l'intero contenuto multimediale in una richiesta HTTP, in contrasto con il protocollo di download dei contenuti multimediali ripristinabile, che può essere scaricato in più richieste. Il download diretto riduce il numero di richieste HTTP, ma aumenta la possibilità che si verifichino errori (ad esempio errori di connessione) che si possono verificare con download di grandi dimensioni.
L'utilizzo è lo stesso descritto in precedenza, oltre alla seguente chiamata che indica a MediaHttpDownloader di eseguire download diretti:
mediaHttpDownloader.setDirectDownloadEnabled(true);