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