Z tego dokumentu dowiesz się, jak korzystać z bezpośredniego i wznawianego przesyłania multimediów za pomocą i bibliotekę klienta interfejsów API Google do języka Java.
Przesyłanie multimediów z możliwością wznowienia
Gdy przesyłasz duży plik multimedialny na serwer, użyj funkcji wznawiania przesyłania multimediów, aby: możesz wysyłać go fragmentami. Biblioteki wygenerowane przez interfejs API Google zawierają wygodnych metod umożliwiających wznawianie przesyłania multimediów.
Protokół przesyłania multimediów z możliwością wznowienia jest podobny do przesyłania multimediów z możliwością wznawiania i opisany w dokumentacji interfejsu Google Drive API.
Projekt protokołu
Poniższy diagram przedstawia, jak działa protokół przesyłania multimediów z możliwością wznowienia:
Szczegóły implementacji
Interesujące Cię główne kategorie to MediaHttpUploader i MediaHttpProgressListener.
Jeśli metody w bibliotekach wygenerowanych na poziomie usługi zawierają atrybut mediaUpload
w dokumencie opisującym,
dla tych metod, które wymagają
InputStreamContent
. (Więcej informacji o przesyłaniu multimediów za pomocą interfejsów API Google
Discovery Service, patrz
Przesłanie multimediów)
Na przykład metoda insert
w interfejsie Drive API
obsługuje mediaUpload
. Do przesłania pliku możesz użyć tego kodu:
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();
Możesz też korzystać z funkcji przesyłania multimediów z możliwością wznowienia bez określonej usługi z wygenerowanymi bibliotekami. Oto przykład:
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); }
Bezpośrednie przesyłanie multimediów
Przesyłanie multimediów z możliwością wznowienia jest domyślnie włączone, ale możesz je wyłączyć i korzystać do bezpośredniego przesyłania multimediów, np. wtedy, gdy przesyłasz mały plik. Bezpośrednie przesyłanie multimediów zostało wprowadzone w 1.9.0-beta biblioteki klienta interfejsów API Google dla języka Java.
Bezpośrednie przesyłanie multimediów powoduje przesłanie całego pliku w jednym żądaniu HTTP, a nie protokół przesyłania multimediów z możliwością wznowienia, który przesyła plik w wielu żądaniach. Bezpośrednie przesyłanie zmniejsza liczbę żądań HTTP, ale zwiększa ryzyko awarii (np. awarii połączenia), które mogą wystąpić w przypadku dużych przesłanych plików.
Korzystanie z bezpośredniego przesyłania multimediów jest takie samo jak opisane powyżej w przypadku przesyłanie multimediów z możliwością wznowienia oraz wywołanie MediaHttpUploader aby przesyłać tylko pliki bezpośrednie:
mediaHttpUploader.setDirectUploadEnabled(true);