In diesem Dokument wird beschrieben, wie Sie direkte und fortsetzbare Medienuploads mit der Google API-Clientbibliothek für Java verwenden.
Fortsetzbarer Medienupload
Wenn Sie eine große Mediendatei auf einen Server hochladen, verwenden Sie den fortsetzbaren Medienupload, um die Datei stückweise zu senden. Die von der Google API generierten Bibliotheken enthalten Komfortmethoden für die Interaktion mit fortsetzbaren Medienuploads.
Das Protokoll zum fortsetzbaren Medienupload ähnelt dem Protokoll für fortsetzbare Medienuploads, das in der Google Drive API-Dokumentation beschrieben wird.
Protokolldesign
Das folgende Sequenzdiagramm zeigt, wie das Protokoll für fortsetzbare Medien hochgeladen wird:
Implementierungsdetails
Die wichtigsten Klassen sind MediaHttpUploader und MediaHttpProgressListener.
Wenn Methoden in den dienstspezifischen Bibliotheken den Parameter mediaUpload
im Discovery-Dokument enthalten, wird eine praktische Methode für diese Methoden erstellt, die InputStreamContent als Parameter verwendet. Weitere Informationen zur Verwendung des Medienuploads mit dem Google APIs Discovery Service finden Sie unter Medienupload.
Die Methode insert
der Drive API unterstützt beispielsweise 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 die Funktion für fortsetzbare Medienuploads auch ohne die dienstspezifischen Bibliotheken verwenden. 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 fortsetzbare Medienupload ist standardmäßig aktiviert. Sie können ihn aber deaktivieren und stattdessen den direkten Medienupload verwenden, z. B. wenn Sie eine kleine Datei hochladen. Der direkte Medienupload wurde in der Version 1.9.0-beta der Google API-Clientbibliothek für Java eingeführt.
Beim direkten Medienupload wird die gesamte Datei in einer HTTP-Anfrage hochgeladen. Im Gegensatz dazu wird das Protokoll zum fortsetzbaren Medienupload verwendet, bei dem die Datei in mehreren Anfragen hochgeladen wird. Durch einen direkten Upload verringert sich die Anzahl der HTTP-Anfragen. Gleichzeitig erhöht sich jedoch die Wahrscheinlichkeit von Fehlern (z. B. Verbindungsfehlern), die bei großen Uploads auftreten können.
Die Verwendung für den direkten Medienupload entspricht der oben beschriebenen Vorgehensweise für den fortsetzbaren Medienupload. Außerdem wird MediaHttpUploader angewiesen, nur direkte Uploads auszuführen:
mediaHttpUploader.setDirectUploadEnabled(true);