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