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 potongan file berdasarkan potongannya. Library yang dihasilkan Google API berisi metode praktis untuk berinteraksi dengan upload media yang dapat dilanjutkan.

Protokol upload media yang dapat dilanjutkan mirip dengan 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

Kelas utama yang diminati adalah MediaHttpUploader dan MediaHttpProgressListener.

Jika metode dalam library yang dihasilkan khusus layanan berisi mediaUpload dalam dokumen Discovery, kemudian metode praktis dibuat untuk metode ini yang membutuhkan InputStreamContent sebagai parameter. (Untuk informasi selengkapnya tentang cara menggunakan upload media dengan Google API Discovery Service, 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 layanan library yang dihasilkan. Berikut adalah 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. Langsung upload media diperkenalkan di versi 1.9.0-beta Library Klien Google API untuk Java.

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 mengurangi jumlah permintaan HTTP tetapi meningkatkan kemungkinan kegagalan (seperti kegagalan koneksi) yang dapat terjadi dengan upload video.

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

mediaHttpUploader.setDirectUploadEnabled(true);