Caricamenti di contenuti multimediali diretti e ripristinabili

Questo documento descrive come utilizzare caricamenti multimediali diretti e ripristinabili con la libreria client dell'API di Google per Java.

Caricamento di contenuti multimediali ripristinabili

Quando carichi un file multimediale di grandi dimensioni su un server, utilizza il caricamento di contenuti multimediali ripristinabili per inviare i blocchi di file per blocco. Le librerie generate dall'API di Google contengono metodi pratici per interagire con il caricamento ripristinabile di contenuti multimediali.

Il protocollo di caricamento di contenuti multimediali ripristinabili è simile a quello di caricamento di contenuti multimediali ripristinabili descritto nella documentazione dell'API Google Drive.

Progettazione del protocollo

Il seguente diagramma di sequenza mostra come funziona il protocollo di caricamento di contenuti multimediali ripristinabili:
Diagramma di sequenza che mostra il movimento di richieste e risposte tra client e server.

Dettagli di implementazione

Le principali classi di interesse sono MediaHttpUploader e MediaHttpProgressListener.

Se i metodi nelle librerie generate specifiche del servizio contengono il parametro mediaUpload nel documento di rilevamento, viene creato un metodo di convenienza per questi metodi che prende InputStreamContent come parametro. Per ulteriori informazioni sull'utilizzo del caricamento di contenuti multimediali con le API di Google Discovery Service, vedi Caricamento di contenuti multimediali.

Ad esempio, il metodo insert dell'API Drive supporta mediaUpload e puoi utilizzare il codice seguente 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 di contenuti multimediali ripristinabili senza il supporto generate dalle librerie. 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 multimediale diretto

Il caricamento di contenuti multimediali ripristinabili è abilitato per impostazione predefinita, ma puoi disabilitarlo e utilizzare al caricamento diretto di contenuti multimediali, ad esempio se vuoi caricare un file di piccole dimensioni. Diretta Il caricamento di elementi multimediali è stato introdotto nella versione 1.9.0-beta della libreria client dell'API di Google per Java.

Il caricamento multimediale diretto carica l'intero file in un'unica richiesta HTTP, anziché il protocollo di caricamento dei contenuti multimediali ripristinabili, che carica il file in più richieste. Il caricamento diretto riduce il numero di richieste HTTP, ma aumenta il rischio di errori (ad esempio errori di connessione) che si possono verificare in presenza di caricamenti.

L'utilizzo del caricamento diretto di contenuti multimediali è uguale a quello descritto sopra per quanto riguarda il caricamento di contenuti multimediali ripristinabili, più la seguente chiamata che indica a MediaHttpUploader per eseguire solo caricamenti diretti:

mediaHttpUploader.setDirectUploadEnabled(true);