Doğrudan ve Devam ettirilebilir Medya Yüklemeleri

Bu dokümanda, 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üklemesi

Büyük bir medya dosyasını bir sunucuya yüklediğinizde, parça parça göndermek için devam ettirilebilir medya yüklemesini kullanın. Google API'si tarafından oluşturulan kitaplıklar, devam ettirilebilir medya yüklemesi ile etkileşim için uygun yöntemleri içerir.

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

Protokol tasarımı

Aşağıdaki şemada, devam ettirilebilir medya yükleme protokolünün işleyiş şekli gösterilmektedir:
İsteklerin ve yanıtların istemci ve sunucu arasında nasıl hareket ettiğini gösteren adım diyagramı.

Uygulama ayrıntıları

Başlıca ilgi sınıfları ise MediaHttpUploader ve MediaHttpprogressListener'dır.

Hizmete özel olarak oluşturulan kitaplıklardaki yöntemler Discovery dokümanındaki mediaUpload parametresini içeriyorsa bu yöntemler için parametre olarak bir InputStreamContent'i alan bir kolaylık yöntemi oluşturulur. (Google API Discovery Hizmeti ile medya yükleme özelliğini 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 destekler ve dosya yüklemek için aşağıdaki kodu kullanabilirsiniz:

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 kitaplıklar olmadan da kullanabilirsiniz. Aşağıda bununla ilgili bir örnek verilmiştir:

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ükleme

Devam ettirilebilir medya yüklemesi varsayılan olarak etkindir, ancak bunu devre dışı bırakabilir ve onun yerine doğrudan medya yüklemeyi kullanabilirsiniz (örneğin, küçük bir dosya yüklüyorsanız). Doğrudan medya yüklemesi, 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 işlemi, dosyayı birden çok istekte yükleyen, devam ettirilebilir medya yükleme protokolü yerine dosyanın tamamını tek bir HTTP isteğinde yükler. Doğrudan yükleme yapmak, HTTP isteklerinin sayısını azaltır ancak büyük yüklemelerde oluşabilecek hataların (bağlantı hataları gibi) olasılığını artırır.

Doğrudan medya yüklemesi kullanımı, devam ettirilebilir medya yüklemesi için yukarıda açıklanan ile aynıdır. Ayrıca MediaHttpUploader öğesine yalnızca doğrudan yüklemeleri yapmasını söyleyen aşağıdaki çağrıdır:

mediaHttpUploader.setDirectUploadEnabled(true);