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:

  1. Setelah menyimpan kode di atas, klik Deploy (Terapkan) → New deployment (Deployment baru).
  2. Pilih Type (Jenis) sebagai Web app.
  3. Atur Execute as (Jalankan sebagai) ke Me (akun Anda).
  4. Atur Who has access (Siapa yang memiliki akses) ke Anyone (Siapa saja).
  5. Klik DeploySalin 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



Postingan populer dari blog ini

Apps Script untuk Cetak Sertifikat

Cara Menentukan Arah Kiblat Menggunakan Google Maps

Algorithma FPB dan KPK dengan Javascript

Peringatan: Aksi Penipuan Skimming Melalui Aplikasi Android M-Pajak

Jasa Penjadwalan Semester, UTS dan UAS Perguruan Tinggi menggunakan Google Sheet

Menambahkan Random Key sebagai ID Pembeda di Google Sheet dengan Apps Script

Apps Script untuk Copy File ke Folder berdasarkan ID yang Terdaftar di Google Sheets

Checking Data yang Belum Dimasukkan dalam Daftar Menggunakan Query Google Sheet

Menyikapi Ucapan AI Pejabat

Generate Karakter Acak dan Menempatkannya di Sel Google Sheets dengan Apps Script