Tutorial ini merupakan kelanjutan dari tutorial sebelumnya tentang upload file ke Google Drive via Google API dengan PHP. Pada tutorial ini saya akan menjelaskan cara membuat script PHP untuk menampilkan list file yang ada di akun Google Drive kita, kemudian bisa mengunduhnya. Lagi-lagi untuk membuat script ini, dibutuhkan Google API.
Seperti halnya ketika membuat script upload file, untuk membuat script download file ini kita juga membutuhkan beberapa hal, yaitu:
- OAuth Credential File
- PHP Google API Client Module
Untuk mendapatkan kedua hal tersebut, bisa kembali membaca artikel sebelumnya.
Namun, khusus untuk membuat file OAuth Credential File, pada bagian Authorized redirect URIs kita perlu mendefinisikan URL yang baru. Misalkan dalam contoh ini, URL dari script untuk menampilkan file list Google Drive adalah ‘http://localhost/gdrive/list.php’.
Setelah mendapatkan OAuth Credential File dan library PHP Google API Client Module, selanjutnya kita mulai coding. Dimulai dari membuat script list.php terlebih dahulu untuk menampilkan file list yang ada di Google Drive kita.
list.php
<?php
session_start();
include 'vendor/autoload.php';
$client = new Google_Client();
$client->setAuthConfig("oauth-credentials2.json");
$client->addScope("https://www.googleapis.com/auth/drive");
// service yang akan digunakan adalah Google Drive
$service = new Google_Service_Drive($client);
// mengecek jika code auth sudah ada namun token access nya blm ada
if (isset($_GET['code'])) {
// gunakan code auth untuk mendapatkan token accessnya
$token = $client->fetchAccessTokenWithAuthCode($_GET['code']);
// simpan token ke session
$_SESSION['upload_token'] = $token;
}
// mengecek jika token access nya blm ada
if (empty($_SESSION['upload_token'])){
// lakukan login via oauth dan mendapatkan code auth
$authUrl = $client->createAuthUrl();
header("Location:".$authUrl);
} else {
// jika token access sudah ada
// gunakan token access untuk mengakses layanan Google API service
$client->setAccessToken($_SESSION['upload_token']);
$client->getAccessToken();
// membaca list file
$results = $service->files->listFiles();
// menampilkan list file
echo "<ul>";
foreach ($results->getFiles() as $file) {
echo "<li><a href='download.php?code=".$_GET['code']."&id=".$file->getID()."'>".$file->getName()."</a></li>";
}
echo "</ul>";
}
?>
Secara umum mekanisme yang terjadi di atas sama seperti di proses upload file, yaitu:
- Proses login melalui Google OAuth.
Dari proses ini akan didapatkan code authentication. Kode ini secara otomatis akan muncul di URL parameter setelah proses redirecting dari login Google ke URL ‘http://localhost/gdrive/list.php’. - Mendapatkan Token Access dari Code Authetication.
Setelah proses login sukses, berikutnya code authentication digunakan untuk mendapatkan token access. Token access ini nanti dipakai untuk mengakses layanan API Google Drive nya
Dari script list.php di atas, perintah getID()
digunakan untuk menampilkan ID dari setiap file yang ada di Google Drive. ID ini nantinya akan digunakan sebagai acuan untuk mengunduh file. Adapun getName()
digunakan untuk menampilkan nama file.
Khusus untuk proses downloadnya, nanti kita buat script terpisah yaitu download.php
download.php
<?php
session_start();
include 'vendor/autoload.php';
$client = new Google_Client();
$client->setAuthConfig("oauth-credentials2.json");
$client->addScope("https://www.googleapis.com/auth/drive");
$service = new Google_Service_Drive($client);
if (isset($_GET['code'])) {
$token = $client->fetchAccessTokenWithAuthCode($_GET['code']);
$_SESSION['upload_token'] = $token;
}
if (empty($_SESSION['upload_token'])){
$authUrl = $client->createAuthUrl();
header("Location:".$authUrl);
} else {
$client->setAccessToken($_SESSION['upload_token']);
$client->getAccessToken();
// membaca file ID yang akan diunduh
$fileid = $_GET['id'];
// membaca data file di Google Drive berdasarkan ID
$file = $service->files->get($fileid);
// membaca mime type dari file
$mime = $file->getMimeType();
// membaca nama file
$name = $file->getName();
// membuat header file yang akan didownload, sesuai mimenya
header("Content-Disposition: attachment; filename=".$name);
header("Content-type: ".$mime);
// membaca content isi file dan menampilkan content
$content = $service->files->get($fileid, array("alt" => "media"));
while (!$content->getBody()->eof()) {
echo $content->getBody()->read(1024);
}
}
?>
Kegunaan dari MIME Type dari script download di atas supaya file tersebut bisa diunduh melalui web browser.
Adapun perintah read(1024)
digunakan untuk mengatur ukuran file yang diunduh, yaitu setiap 1.024 bytes. Proses unduhan ini diatur demikian supaya proses downloadnya optimal, yaitu dengan memotong-motong ukuran filenya.
Demikian tutorial ini saya buat, semoga bermanfaat. Selamat mencoba! 😀