Quando scarichi un file multimediale di grandi dimensioni da un server, utilizza download di file multimediali ripristinabili per scaricare i blocchi di file per blocco. L'API di Google le librerie generate contengono metodi pratici per interagire download di contenuti multimediali.
Il protocollo di download di contenuti multimediali ripristinabili è simile al caricamento di contenuti multimediali ripristinabili descritto nel 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 la loro dimensione è configurabile. Se si è verificato un errore del server in una richiesta, la richiesta viene tentata di nuovo.
Se i metodi nelle librerie generate specifiche del servizio supportano il download nel documento di rilevamento, quindi un un pratico metodo di download per questi metodi che prendono in OutputStream. Per ulteriori informazioni sull'utilizzo del download di contenuti multimediali con il servizio di rilevamento delle API di Google, vedi 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 del 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 di contenuti multimediali diretti
Il download di contenuti multimediali ripristinabili è abilitato per impostazione predefinita, ma puoi disabilitarlo e utilizzare il download diretto di contenuti multimediali, ad esempio se stai scaricando un file di piccole dimensioni. Il download diretto di contenuti multimediali è stato introdotto 1.9.0-beta della libreria client dell'API di Google per Java.
Il download multimediale diretto consente di scaricare l'intero contenuto multimediale in un'unica richiesta HTTP, al contrario del protocollo ripristinabile per il download dei contenuti multimediali, che può scaricare richieste. Eseguire un download diretto riduce il numero di richieste HTTP, aumenta la possibilità che si verifichino errori (ad es. errori di connessione) con grandi download.
L'utilizzo è lo stesso di quanto descritto sopra, più i seguenti una chiamata che dice MediaHttpDownloader per eseguire download diretti:
mediaHttpDownloader.setDirectDownloadEnabled(true);