Tutorial Upload File ke Google Drive dari Website
Panduan ini adalah hasil diskusi penulis dengan aplikasi ChatGPT yang menjelaskan cara membuat sistem upload file langsung dari website Anda ke Google Drive menggunakan kombinasi HTML/JavaScript (Frontend), PHP (Proxy), dan Google Apps Script (Backend).
Langkah 1: Siapkan Google Apps Script (Backend)
Kode ini berfungsi sebagai Backend yang memiliki izin untuk berinteraksi langsung dengan Google Drive API.
PENTING: Ganti
"id folder" di baris kode dengan ID folder tujuan Anda di Google Drive.Kode Apps Script (Code.gs)
function doPost(e) {
try {
// Memproses data JSON yang dikirim oleh PHP Proxy
const data = JSON.parse(e.postData.contents);
const folderId = "id folder"; // <-- GANTI DENGAN ID FOLDER GOOGLE DRIVE ANDA
// Fallback data
const fileName = data.filename || "tanpa_nama";
const mimeType = data.mimeType || "application/octet-stream";
// Mendekode konten Base64
const content = Utilities.base64Decode(data.content);
// Membuat Blob file
const blob = Utilities.newBlob(content, mimeType, fileName);
// Mengunggah ke Google Drive
const folder = DriveApp.getFolderById(folderId);
const file = folder.createFile(blob);
// Siapkan respons sukses untuk dikembalikan ke PHP Proxy
const result = {
success: true,
fileId: file.getId(),
fileUrl: file.getUrl(),
name: file.getName(),
mimeType: file.getMimeType(),
};
return ContentService.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
} catch (err) {
// Siapkan respons error
const errorResult = {
success: false,
message: err.message,
};
return ContentService.createTextOutput(JSON.stringify(errorResult))
.setMimeType(ContentService.MimeType.JSON);
}
}
Deploy Web App:
- Setelah menyimpan kode di atas, klik Deploy (Terapkan) → New deployment (Deployment baru).
- Pilih Type (Jenis) sebagai Web app.
- Atur Execute as (Jalankan sebagai) ke Me (akun Anda).
- Atur Who has access (Siapa yang memiliki akses) ke Anyone (Siapa saja).
- Klik Deploy. Salin URL Web App yang dihasilkan. Anda akan menggunakannya di Langkah 2.
Langkah 2: Buat PHP Proxy (upload-proxy.php)
File ini adalah perantara (Proxy) yang mengatasi isu CORS dan meneruskan data Base64 dari website ke Apps Script.
PENTING: GANTI variabel
$scriptUrl dengan URL Web App yang Anda dapatkan dari Langkah 1.Kode PHP (upload-proxy.php)
<?php
// Header CORS: Izinkan akses dari domain manapun
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type");
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
exit(0);
}
// <-- GANTI DENGAN URL WEB APP ANDA DARI LANGKAH 1 -->
$scriptUrl = "https://script.google.com/macros/s/ID_APPS_SCRIPT_ANDA/exec";
// Ambil data JSON mentah dari klien
$data = file_get_contents('php://input');
// Inisiasi cURL untuk meneruskan permintaan ke Apps Script
$ch = curl_init($scriptUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
curl_close($ch);
// Pastikan respons dari Apps Script adalah JSON yang valid
if (json_decode($response) === null) {
// Jika tidak valid, kembalikan error JSON yang aman untuk klien
echo json_encode(["success" => false, "message" => "Server Apps Script mengembalikan data tidak valid."]);
exit;
}
// Kembalikan respons JSON dari Apps Script ke klien
echo $response;
?>
Langkah 3: Kode HTML dan JavaScript (Frontend)
Kode ini adalah antarmuka yang dilihat pengguna. Letakkan kode ini di halaman website Anda.
PENTING: GANTI variabel
SCRIPT_URL di JavaScript dengan URL file upload-proxy.php di hosting Anda.Kode HTML dan JavaScript
<!DOCTYPE html>
<html>
<body>
<h2>Upload ke Google Drive</h2>
<input type="file" id="file" />
<button id="upload">Upload</button>
<p id="status"></p>
<script>
// <-- GANTI DENGAN URL FILE upload-proxy.php ANDA -->
const SCRIPT_URL = "https://contohwebsite.com/upload-proxy.php";
const uploadBtn = document.getElementById("upload");
const fileInput = document.getElementById("file");
const status = document.getElementById("status");
uploadBtn.addEventListener("click", async () => {
const file = fileInput.files[0];
if (!file) {
// Gunakan cara lain selain alert() untuk notifikasi
status.textContent = "Pilih file dulu!";
return;
}
status.textContent = "Mengunggah...";
// 1. Membaca file dan mengonversinya ke Base64
const reader = new FileReader();
reader.onload = async () => {
// Memisahkan header data URL (data:mime/type;base64,) dari konten Base64
const base64Data = reader.result.split(",")[1];
const data = {
filename: file.name,
mimeType: file.type,
content: base64Data
};
try {
// 2. Mengirim data ke PHP Proxy
const response = await fetch(SCRIPT_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
});
const text = await response.text();
let result;
try {
result = JSON.parse(text);
} catch {
throw new Error("Respon dari server tidak valid.");
}
// 3. Menampilkan hasil
if (result.success) {
status.innerHTML = `
<b>Berhasil upload:</b> ${result.name}<br>
<a href="${result.fileUrl}" target="_blank">Lihat di Google Drive</a>
`;
} else {
status.textContent = "Gagal upload: " + (result.message || "Tidak diketahui");
}
} catch (err) {
status.textContent = "Error: " + err.message;
}
};
reader.readAsDataURL(file); // Memulai pembacaan file
});
</script>
</body>
</html>

Komentar
Posting Komentar