Doğrudan ve Devam Ettirilebilir Medya Yüklemeleri

Bu belgede, Java için Google API İstemci Kitaplığı ile doğrudan ve devam ettirilebilir medya yüklemelerinin nasıl kullanılacağı açıklanmaktadır.

Devam ettirilebilir medya yükleme

Sunucuya büyük bir medya dosyası yüklediğinizde, dosya parçasını bu parçaya göre göndermek için devam ettirilebilir medya yüklemesini kullanın. Google API tarafından oluşturulan kitaplıklar, devam ettirilebilir medya yüklemeleriyle etkileşimde bulunmak için kullanışlı yöntemler içerir.

Devam ettirilebilir medya yükleme protokolü, Google Drive API belgelerinde açıklanan devam ettirilebilir medya yükleme protokolüne benzer.

Protokol tasarımı

Aşağıdaki sıra şemasında devam ettirilebilir medya yükleme protokolünün işleyiş şekli gösterilmektedir:
İstek ve yanıtların istemci ile sunucu arasında nasıl hareket ettiğini gösteren sıra diyagramı.

Uygulama ayrıntıları

Ana ilgi alanı sınıfları MediaHttpUploader ve MediaHttpProgressListener'dir.

Hizmete özel olarak oluşturulan kitaplıklardaki yöntemler Discovery dokümanında mediaUpload parametresini içeriyorsa bu yöntemler için InputStreamContent'i parametre olarak alan bir kolaylık yöntemi oluşturulur. (Google API Keşif Hizmeti ile medya yüklemeyi kullanma hakkında daha fazla bilgi için Medya yükleme bölümüne bakın.)

Örneğin, Drive API'nin insert yöntemi mediaUpload dosya türünü destekler ve aşağıdaki kodu kullanarak dosya yükleyebilirsiniz:

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

Devam ettirilebilir medya yükleme özelliğini, hizmete özel olarak oluşturulan kitaplıklar olmadan da kullanabilirsiniz. Örnek:

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

Doğrudan medya yüklemesi

Devam ettirilebilir medya yükleme varsayılan olarak etkindir, ancak bunu devre dışı bırakabilir ve bunun yerine (örneğin, küçük bir dosya yüklüyorsanız) doğrudan medya yüklemeyi kullanabilirsiniz. Doğrudan medya yükleme, Java için Google API İstemci Kitaplığı'nın 1.9.0-beta sürümünde kullanıma sunulmuştur.

Doğrudan medya yükleme, dosyayı birden çok istekte yükleyen devam ettirilebilir medya yükleme protokolünün aksine tüm dosyayı bir HTTP isteğine yükler. Doğrudan yükleme yapmak HTTP isteklerinin sayısını azaltır, ancak büyük yüklemelerde oluşabilecek hata (bağlantı hataları gibi) olasılığını artırır.

Doğrudan medya yükleme kullanımı, yukarıda devam ettirilebilir medya yüklemesi için açıklanan ve MediaHttpUploader'a yalnızca doğrudan yüklemeler yapmasını söyleyen aşağıdaki çağrıyla aynıdır:

mediaHttpUploader.setDirectUploadEnabled(true);