Uploads direkter und wiederaufnehmbarer Medien

In diesem Dokument wird beschrieben, wie Sie direkte und fortsetzbare Medienuploads mit Google API-Clientbibliothek für Java

Upload von fortsetzbaren Medien

Wenn Sie eine große Mediendatei auf einen Server hochladen, verwenden Sie den Upload von fortsetzbaren Medien, um Senden Sie die Datei Stück für Stück. Die von Google API generierten Bibliotheken enthalten Methoden zum Interagieren mit dem Upload von fortsetzbaren Medien.

Das Upload-Protokoll für fortsetzbare Medien ähnelt dem Upload von fortsetzbaren Medien -Dokumentation zur Google Drive API beschrieben.

Protokolldesign

Das folgende Sequenzdiagramm zeigt, wie das Uploadprotokoll für fortsetzbare Medien funktioniert:
Sequenzdiagramm, das zeigt, wie Anfragen und Antworten zwischen Client und Server verschoben werden

Implementierungsdetails

Die wichtigsten Kategorien sind MediaHttpUploader und MediaHttpProgressListener.

Wenn Methoden in den dienstspezifischen generierten Bibliotheken das Objekt mediaUpload enthalten im Discovery-Dokument. wird für diese Methoden eine unkomplizierte Methode erstellt, InputStreamContent als Parameter verwendet werden. Weitere Informationen zur Verwendung des Medien-Uploads mit den Google APIs Discovery Service, siehe Media-Upload.

Zum Beispiel die Methode insert der Drive API. unterstützt mediaUpload und Sie können den folgenden Code verwenden, um eine Datei hochzuladen:

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

Sie können auch die Funktion zum Hochladen von fortsetzbaren Medien ohne die dienstspezifischen Bibliotheken generiert. Hier ein Beispiel:

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

Direkter Medienupload

Der Upload von fortsetzbaren Medien ist standardmäßig aktiviert, Sie können ihn aber deaktivieren und direkter Medien-Upload, z. B. wenn Sie eine kleine Datei hochladen. Direkt Einführung des Medien-Uploads in der 1.9.0-beta Version der Google API-Clientbibliothek für Java.

Beim direkten Medien-Upload wird die gesamte Datei in einer HTTP-Anfrage hochgeladen, das Protokoll für fortsetzbare Medien, das die Datei in mehreren Anfragen hochlädt. Durch einen direkten Upload wird die Anzahl der HTTP-Anfragen reduziert, Fehlerwahrscheinlichkeit (wie Verbindungsfehler), die bei großen Uploads.

Die Verwendung beim direkten Medien-Upload entspricht der Beschreibung fortsetzbarer Medien-Upload sowie der folgende Aufruf, mit dem MediaHttpUploader für direkte Uploads:

mediaHttpUploader.setDirectUploadEnabled(true);