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