About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • PHP
  • /
  • Upload File ke Google Drive Via Google API dengan PHP
PHP

Upload File ke Google Drive Via Google API dengan PHP

Ingin membuat sendiri aplikasi sederhana untuk upload file ke Google Drive kita menggunakan script PHP? Tutorial ini akan menjelaskan secara detil langkah demi langkah pembuatan aplikasinya. Untuk mengintegrasikan aplikasi yang dibuat dengan PHP ke Google Drive nantinya menggunakan Google API. Meskipun agak ribet sedikit, tapi tidak sulit kok membuatnya.

Sebelum kita mulai membuat script PHP nya, terlebih dahulu akan disampaikan beberapa hal yang perlu dipersiapkan khususnya untuk keperluan integrasinya dengan Google API. Kebutuhan dasar yang diperlukan antara lain:

  • Akun Google
  • PHP dengan versi minimal 5.4, lebih tinggi versinya lebih baik
  • OAuth Credential file
  • PHP Google API Client Module

File oauth credentials adalah semacam file yang berisi data dalam format JSON yang nantinya diperlukan ketika proses login ke Google API via oauth (open authentication) melalui aplikasi yang kita buat .

Adapun PHP Google API Client Module adalah kumpulan library-library yang dibuat untuk platform PHP, untuk keperluan integrasi dengan layanan Google via Google API.

Membuat OAuth Credential File

Untuk membuat file ini, kita bisa melakukannya melalui Google API Console. Sebelum kita membuatnya, misal diasumsikan nantinya kita akan membuat aplikasi upload filenya di url ‘http://localhost/gdrive/upload.php’. URL aplikasi ini nantinya akan diperlukan ketika pembuatan OAuth Credential file, karena URL ini akan diregisterkan terlebih dahulu di Google API.

Baik, selanjutnya kita bisa mulai proses membuat file OAuth Credentialnya. Setelah masuk ke Google API Console, silakan masuk ke menu ‘Credentials’ yang ada di sidebar sebelah kiri.

Setelah itu klik ‘Create Credentials’ yang ada di menu paling atas halaman, kemudian pilih submenu ‘OAuth client ID’

Proses berikutnya adalah menentukan tipe aplikasi, dalam hal ini karena kita akan membuat aplikasi web maka dipilih ‘Web Application’ di bagian ‘Application Type’. Isikan pula nama aplikasinya. Nama aplikasi pada prinsipnya bebas, misalkan dalam contoh ini kita beri nama ‘MyApp01’.

Masih di form yang sama, lihat di bagian ‘Authorized redirect URIs’. Pada bagian ini isikan URL dari aplikasi yang akan kita buat, yaitu ‘http://localhost/gdrive/upload.php’

Setelah selesai, silakan klik tombol ‘Create’.

Apabila berhasil, maka akan muncul nama aplikasi yang tadi kita buat. Selanjutnya silakan diunduh file tersebut melalui link yang disediakan.

Setelah file tersebut diunduh, akan kita dapatkan sebuah file .json dengan nama file yang cukup panjang (berawalan client_secret_XXXXXX.json) di mana nama file tersebut merupakan client ID dari aplikasi kita. Karena nama filenya cukup panjang, maka bisa direname nama filenya misalkan dengan nama ‘oauth-credentials.json

Mendapatkan PHP Google API Client Module

Setelah file OAuth Credential file didapatkan, langkah berikut nya adalah mengunduh library Google API Client Module untuk platform PHP. Cara untuk mengunduh library ini sebenarnya ada 2 cara, yaitu bisa menggunakan composer, atau mengunduhnya secara manual di Github.

Namun, dari eksperimen yang saya coba dari keduanya. Untuk pengunduhan lewat composer sepertinya kurang kompatibel dengan PHP 7.4 karena ada beberapa function yang deprecated. Sehingga saya putuskan untuk menggunakan cara pengunduhan secara manual. Dalam hal ini saya menggunakan Google API Client v2.4.1.

Setelah file Google API Client diunduh, selanjutnya diektrak di komputer kita. Pada hasil ekstraksi akan diperoleh dua folder yaitu ‘vendor’ dan ‘src’, Kedua folder ini nantinya akan dipakai di aplikasi yang akan dibuat.

Mulai Coding…

OK, sekarang kita mulai ke bagian intinya yaitu codingnya 😀

Oya dalam contoh ini, saya kebetulan menggunakan XAMPP yang menggunakan versi PHP 7.4. Sebelum mulai proses coding, terlebih dahulu saya buat folder ‘gdrive‘ di dalam ‘htdocs’ nya XAMPP. Kemudian, saya pindahkan beberapa hal ini ke dalam folder ‘gdrive’ tersebut:

  • file ‘oauth-credential.json‘ yang tadi sudah diunduh
  • folder ‘vendor‘ dari Google API Client yang tadi sudah diekstrak
  • folder ‘src‘ dari Google API Client yang tadi juga sudah diekstrak

Selanjutnya kita mulai mengcoding script upload.php nya. Sebelum mulai coding, terlebih dahulu kita harus memahami mekanisme proses integrasi antara aplikasi yang nanti dibuat dengan Google API. Berikut ini adalah mekanisme yang terjadi:

  1. Aplikasi pertama kali akan melakukan login menggunakan OAuth melalui sebuah URL tertentu
  2. Jika login sukses, Google API akan mengirimkan sebuah kode atau token yang nantinya digunakan untuk mengakses layanan Google API.
  3. Supaya token ini bisa selalu bisa terbaca, sebaiknya kita simpan ke dalam sebuah session.
  4. Dengan menggunakan token tersebut, proses upload file ke Google Drive nantinya akan dilakukan.

Berdasarkan mekanisme di atas, kita buat script upload.php sebagai berikut.

<?php
session_start();
include 'vendor/autoload.php';

// setting config untuk layanan akses ke google drive
$client = new Google_Client();
$client->setAuthConfig("oauth-credentials.json");
$client->addScope("https://www.googleapis.com/auth/drive");
$service = new Google_Service_Drive($client);

// mengecek keberadaan token session
if (empty($_SESSION['upload_token'])){
	// jika token belum ada, maka lakukan login via oauth
	$authUrl = $client->createAuthUrl();
	header("Location:".$authUrl);

} else {
	// jika token sudah ada, maka munculkan form upload file
?>
	<h1>Upload to GDrive</h1>
	<form method="post" enctype="multipart/form-data" action="upload.php">
		Pilih File:
		  <input type="file" name="fileToUpload" id="fileToUpload">
		  <input type="submit" value="Upload File" name="submit">		
	</form>

<?php
	// jika form upload disubmit
	if (isset($_POST['submit'])){
		// menggunakan token untuk mengakses google drive  
		$client->setAccessToken($_SESSION['upload_token']);
		// membaca token respon dari google drive
		$client->getAccessToken();

		// instansiasi obyek file yg akan diupload ke Google Drive
	 	$file = new Google_Service_Drive_DriveFile();
		// set nama file di Google Drive disesuaikan dg nama file aslinya
		$file->setName($_FILES["fileToUpload"]["name"]);
		// proses upload file ke Google Drive dg multipart
		$result = $service->files->create($file, array(
			'data' => file_get_contents($_FILES["fileToUpload"]["tmp_name"]),
			'mimeType' => 'application/octet-stream',
			'uploadType' => 'multipart'));

		// menampilkan nama file yang sudah diupload ke google drive
		echo $result->name."<br>";
	}

}

// proses membaca token pasca login
if (isset($_GET['code'])) {
  $token = $client->fetchAccessTokenWithAuthCode($_GET['code']);
  // simpan token ke session
  $_SESSION['upload_token'] = $token;
}

?>

OK.. script upload.php sudah jadi. Sehingga di dalam folder ‘gdrive’ berisi beberapa item file dan folder berikut ini:

Sekarang saatnya kita coba menjalankannya. Silakan buka di browser URL http://localhost/gdrive/upload.php.

Untuk pertama kalinya, kemungkinan kita akan diminta untuk login ke akun Google, dan diberikan beberapa konfirmasi authorisasi terhadap layanan Google API nya. Selanjutnya silakan browse sembarang file dari komputer dari form uploadnya. Setelah disubmit, akan Anda dapatkan file tersebut nongol di Google Drive kita, seperti pada tampilan berikut ini.

Pilih file untuk diupload
Proses upload selesai
File yang diupload muncul di Google Drive

OK selamat mencoba, dan silakan mengembangkannya sendiri dengan mempelajari fitur-fitur lainnya di Google Drive API Documentation.

Saya seorang dosen dan peneliti di Universitas Sebelas Maret. Bidang penelitian saya tentang: adaptive learning, datascience, dan computer aided learning. Selain itu saya juga seorang blogger, serta penulis buku tentang pemrograman, dan matematika.

One Comment

Leave a Reply