Ten dokument opisuje, jak korzystać z bezpośredniego i wznawianego przesyłania multimediów za pomocą biblioteki klienta interfejsu API Google dla języka Java.
Przesyłanie multimediów z możliwością wznowienia
Gdy przesyłasz na serwer duży plik multimedialny, użyj funkcji odtwarzania multimediów, aby wysłać jeden fragment pliku. Biblioteki wygenerowane przez interfejs API Google zawierają wygodne metody interakcji z przesyłaniem multimediów wznawianych.
Protokół przesyłania multimediów wznawianych jest podobny do protokołu przesyłania multimediów wznowionego w dokumentacji interfejsu Google Drive API.
Konstrukcja protokołu
Ten diagram pokazuje, jak działa protokół przesyłania multimediów wznawianych:
Szczegóły implementacji
Główne klasy, które Cię interesują, to MediaHttpUploader i MediaHttpProgressListener.
Jeśli metody w bibliotekach generowanych dla konkretnych usług zawierają parametr mediaUpload
w dokumencie Discovery, tworzona jest dla nich wygodna metoda, która wykorzystuje parametr InputStreamContent. Więcej informacji o korzystaniu z przesyłania multimediów za pomocą usługi Discovery interfejsu API Google znajdziesz w artykule Przesyłanie multimediów.
Na przykład metoda insert
Drive API obsługuje mediaUpload
i możesz przesłać plik za pomocą 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ż użyć funkcji wznawiania przesyłania multimediów bez bibliotek wygenerowanych dla danej usługi. 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
Funkcja wznawiania przesyłania multimediów jest domyślnie włączona, ale możesz ją wyłączyć i zamiast niej skorzystać z bezpośredniego przesyłania multimediów, na przykład jeśli przesyłasz mały plik. Bezpośrednie przesyłanie multimediów zostało wprowadzone w wersji 1.9.0-beta biblioteki klienta interfejsów API Google dla języka Java.
Bezpośrednie przesyłanie multimediów przesyła cały plik w ramach 1 żądania HTTP, w odróżnieniu od protokołu wznawiania przesyłania multimediów, który przesyła plik w wielu żądaniach. Bezpośrednie przesyłanie zmniejsza liczbę żądań HTTP, ale zwiększa ryzyko niepowodzenia (np. nieudanego połączenia), które mogą wystąpić w przypadku przesyłania dużych ilości danych.
Sposób użycia bezpośredniego przesyłania multimediów jest taki sam jak w przypadku wznawiania przesyłania multimediów. Zwróć uwagę na to wywołanie, które informuje narzędzie MediaHttpUploader, że ma przeprowadzać tylko przesyłanie bezpośrednie:
mediaHttpUploader.setDirectUploadEnabled(true);