• 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.


Assalaamu'alaikum.. aktivitas keseharian saya mengajar di Universitas Sebelas Maret, dengan matakuliah pemrograman dan basis data. Adapun bidang penelitian saya tentang computational thinking dan computer-aided learning.

28 Comments

    • Rosihan Ari Yuana

      October 5, 2021 at 3:59 pm

      mestinya bisa mas.. krn di google drive ini ada sistem versioning dari file yg diupload. Tp saya blm mempraktikannya ๐Ÿ˜€

  • FIRMAN

    January 24, 2022 at 11:03 am

    assalamualaikum, mas klw di setting masuknya ke akun tertentu bisa ga ?
    klw yang ini saya masuk dengan akun google A, filenya masuk ke akun A
    saya login masuk menggunakan akun google B, filenya juga masuk ke akun B
    kalau di setting semua filenya masuk akun A bisa ga mas ?
    syukran , mohon bantuanya

    Reply
  • Zain mat99

    January 30, 2022 at 12:56 pm

    Terimakasih Pak Ari..
    Alhamdulillah Sangat bermanfaat. Kebetulan lagi ada pembuatan aplikasi online untuk sekolah
    Salam dari Alumni p mat uns 99.

    Reply
  • ironman

    March 2, 2022 at 2:10 pm

    Terima kasih Pak ari ilmunya sangat bermanfaat sekali, sy sudah coba dan berhasil, pak ari kalo untuk ambil link dokumennya agar tersimpan di table sehingga dapat ditampilkan di data tables bagaimana ya pak
    mohon petunjuknya
    terima kasih

    Reply
  • ade

    March 17, 2022 at 11:29 am

    mas kalo sy login menggunakan akun gdrive lain trus upload file berhasil ke akun sy masuk filenya,
    tapi kalo file di akun gdrive lain itu sy delete datanya kedelete juga ya pak kenapa ya

    Reply
  • Syauqie

    August 23, 2022 at 5:43 am

    Terimakasih banyak sharenya Mas, sangat bermanfaat dan pas banget kebutuhannya.
    Maaf mau bertanya, saya beberapa kali sukses upload ke GDrive.
    Tapi tiba-tiba gagal upload dan muncul pesan error sbb, ini kenapa yah?
    Terimakasih banyak sebelumnya.
    =============== start ============
    Fatal error: Uncaught Google_Service_Exception: { “error”: { “errors”: [ { “domain”: “global”, “reason”: “authError”, “message”: “Invalid Credentials”, “locationType”: “header”, “location”: “Authorization” } ], “code”: 401, “message”: “Invalid Credentials” } } in C:\xampp\htdocs\gdrive\src\Google\Http\REST.php:118 Stack trace: #0 C:\xampp\htdocs\gdrive\src\Google\Http\REST.php(94): Google_Http_REST::decodeHttpResponse(Object(GuzzleHttp\Psr7\Response), Object(GuzzleHttp\Psr7\Request), ‘Google_Service_…’) #1 C:\xampp\htdocs\gdrive\src\Google\Task\Runner.php(176): Google_Http_REST::doExecute(Object(GuzzleHttp\Client), Object(GuzzleHttp\Psr7\Request), ‘Google_Service_…’) #2 C:\xampp\htdocs\gdrive\src\Google\Http\REST.php(58): Google_Task_Runner->run() #3 C:\xampp\htdocs\gdrive\src\Google\Client.php(842): Google_Http_REST::execute(Object(GuzzleHttp\Client), Object(GuzzleHttp\Psr7\Request), ‘Google_Service_…’, Array, NULL) #4 C:\xampp\htdocs\gdrive\src\Google\Service\Resource.php(232): in C:\xampp\htdocs\gdrive\src\Google\Http\REST.php on line 118

    Reply
    • Rosihan Ari Yuana

      October 14, 2022 at 6:42 am

      parameter code nya didapat dari redirecting setelah proses authentication google mas.. otomatis muncul setelah redirecting..
      versi laravelnya gak ada ๐Ÿ™‚

  • mumuz

    November 3, 2022 at 1:31 pm

    mohon pencerahannya ada error begini mas
    Warning: require(C:\xampp\htdocs\gdrive\vendor\composer/../ralouphie/getallheaders/src/getallheaders.php): failed to open stream: No such file or directory in C:\xampp\htdocs\gdrive\vendor\composer\autoload_real.php on line 55

    Fatal error: require(): Failed opening required ‘C:\xampp\htdocs\gdrive\vendor\composer/../ralouphie/getallheaders/src/getallheaders.php’ (include_path=’C:\xampp\php\PEAR’) in C:\xampp\htdocs\gdrive\vendor\composer\autoload_real.php on line 55

    Reply

Leave a Reply