Upload Media Langsung dan yang Dapat Dilanjutkan

Dokumen ini menjelaskan cara menggunakan upload media langsung dan dapat dilanjutkan dengan Library Klien Google API untuk Java.

Upload media yang dapat dilanjutkan

Saat Anda mengupload file media besar ke server, gunakan upload media yang dapat dilanjutkan untuk mengirim setiap potongan file. Library yang dihasilkan Google API berisi metode yang mudah untuk berinteraksi dengan upload media yang dapat dilanjutkan.

Protokol upload media yang dapat dilanjutkan mirip dengan protokol upload media yang dapat dilanjutkan yang dijelaskan dalam dokumentasi Google Drive API.

Desain protokol

Diagram urutan berikut menunjukkan cara kerja protokol upload media yang dapat dilanjutkan:
Diagram urutan menunjukkan bagaimana permintaan dan respons berpindah antara klien dan server.

Detail implementasi

Class minat utama adalah MediaHttpUploader dan MediaHttpProgressListener.

Jika metode dalam library yang dihasilkan khusus layanan berisi parameter mediaUpload dalam Dokumen penemuan, metode yang mudah akan dibuat untuk metode ini yang menggunakan InputStreamContent sebagai parameter. (Untuk informasi selengkapnya tentang penggunaan upload media dengan Layanan Discovery Google API, lihat Upload media.)

Misalnya, metode insert Drive API mendukung mediaUpload, dan Anda dapat menggunakan kode berikut untuk mengupload file:

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

Anda juga dapat menggunakan fitur upload media yang dapat dilanjutkan tanpa library yang dihasilkan khusus layanan. Berikut contohnya:

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

Upload media langsung

Upload media yang dapat dilanjutkan diaktifkan secara default, tetapi Anda dapat menonaktifkannya dan menggunakan upload media langsung, misalnya jika Anda mengupload file kecil. Upload media langsung diperkenalkan dalam Library Klien Google API versi 1.9.0-beta untuk Java.

Upload media langsung akan mengupload seluruh file dalam satu permintaan HTTP, berbeda dengan protokol upload media yang dapat dilanjutkan, yang mengupload file dalam beberapa permintaan. Melakukan upload langsung akan mengurangi jumlah permintaan HTTP, tetapi meningkatkan kemungkinan kegagalan (seperti kegagalan koneksi) yang dapat terjadi dengan upload yang besar.

Penggunaan untuk upload media langsung sama dengan penggunaan yang dijelaskan di atas untuk upload media yang dapat dilanjutkan, ditambah panggilan berikut yang memberi tahu MediaHttpUploader untuk hanya melakukan upload langsung:

mediaHttpUploader.setDirectUploadEnabled(true);