Upload Media Langsung dan yang Dapat Dilanjutkan

Dokumen ini menjelaskan cara menggunakan upload media langsung dan yang 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 mengirimkan potongan file menurut potongan. Library yang dihasilkan Google API berisi metode praktis 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 yang menunjukkan bagaimana permintaan dan respons berpindah antara klien dan server.

Detail implementasi

Class utama yang menarik adalah MediaHttpUploader dan MediaHttpProgressListener.

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

Misalnya, metode insert dari 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 ini 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 sebagai gantinya, misalnya jika Anda mengupload file kecil. Upload media langsung diperkenalkan dalam Library Klien Google API untuk Java versi 1.9.0-beta.

Upload media langsung mengupload seluruh file dalam satu permintaan HTTP, bukan 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 besar.

Penggunaan untuk upload media langsung sama dengan 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);