Questo documento descrive come utilizzare i caricamenti multimediali diretti e ripristinabili con la libreria client delle API di Google per Java.
Caricamento dei contenuti multimediali ripristinabile
Quando carichi un file multimediale di grandi dimensioni su un server, utilizza la caricamento di contenuti multimediali ripristinabile per inviare il blocco di file in base al blocco. Le librerie generate dall'API di Google contengono metodi pratici per interagire con il caricamento di contenuti multimediali ripristinabili.
Il protocollo di caricamento dei media ripristinabile è simile al protocollo di caricamento dei media ripristinabile descritto nella documentazione dell'API Google Drive.
Progettazione di protocolli
Il seguente diagramma di sequenza mostra come funziona il protocollo di caricamento dei media ripristinabile:
Dettagli di implementazione
Le classi di interesse principali sono MediaHttpUploader e MediaHttpProgressListener.
Se i metodi nelle librerie generate specifiche per il servizio contengono il parametro mediaUpload
nel documento di rilevamento, viene creato un metodo di convenienza per questi metodi che accetta un valore InputStreamContent come parametro. Per ulteriori informazioni sull'utilizzo del caricamento dei contenuti multimediali con il servizio di rilevamento delle API di Google, consulta Caricamento dei contenuti multimediali.
Ad esempio, il metodo insert
dell'API Drive supporta mediaUpload
e puoi utilizzare il seguente codice per caricare un file:
class CustomProgressListener implements MediaHttpUploaderProgressListener { public void progressChanged(MediaHttpUploader uploader) throws IOException { switch (uploader.getUploadState()) { case INITIATION_STARTED: System.out.println("Initiation has started!"); break; case INITIATION_COMPLETE: System.out.println("Initiation is complete!"); break; case MEDIA_IN_PROGRESS: System.out.println(uploader.getProgress()); break; case MEDIA_COMPLETE: System.out.println("Upload is complete!"); } } } File mediaFile = new File("/tmp/driveFile.jpg"); InputStreamContent mediaContent = new InputStreamContent("image/jpeg", new BufferedInputStream(new FileInputStream(mediaFile))); mediaContent.setLength(mediaFile.length()); Drive.Files.Insert request = drive.files().insert(fileMetadata, mediaContent); request.getMediaHttpUploader().setProgressListener(new CustomProgressListener()); request.execute();
Puoi anche utilizzare la funzionalità di caricamento dei media ripristinabile senza le librerie generate specifiche per il servizio. Ecco un esempio:
File mediaFile = new File("/tmp/Test.jpg"); InputStreamContent mediaContent = new InputStreamContent("image/jpeg", new BufferedInputStream(new FileInputStream(mediaFile))); mediaContent.setLength(mediaFile.length());MediaHttpUploader uploader = new MediaHttpUploader(mediaContent, transport, httpRequestInitializer); uploader.setProgressListener(new CustomProgressListener()); HttpResponse response = uploader.upload(requestUrl); if (!response.isSuccessStatusCode()) { throw GoogleJsonResponseException(jsonFactory, response); }
Caricamento diretto dei contenuti multimediali
Il caricamento di contenuti multimediali ripristinabile è attivato per impostazione predefinita, ma puoi disattivarlo e utilizzarlo invece per il caricamento diretto, ad esempio se stai caricando un file di piccole dimensioni. Il caricamento dei contenuti multimediali diretti è stato introdotto nella versione 1.9.0-beta della libreria client delle API di Google per Java.
Il caricamento multimediale diretto consente di caricare l'intero file in una richiesta HTTP, anziché il protocollo di caricamento dei contenuti multimediali ripristinabile, che carica il file in più richieste. Eseguire un caricamento diretto riduce il numero di richieste HTTP, ma aumenta la possibilità di errori (ad esempio di connessione) che si possono verificare con caricamenti di grandi dimensioni.
L'utilizzo per il caricamento multimediale diretto è lo stesso descritto sopra per il caricamento di contenuti multimediali ripristinabile, più la seguente chiamata che indica a MediaHttpUploader di eseguire solo caricamenti diretti:
mediaHttpUploader.setDirectUploadEnabled(true);