Days
Hours
Minutes
Seconds

Promo Grand Opening

15% OFF

Khusus Pelanggan Baru

Tutorial Laravel #30: Upload File dengan Laravel

Tentu, berikut adalah artikel mengenai tutorial upload file dengan Laravel.


 

 

Mengunggah file (gambar, dokumen, video, dll.) adalah fitur umum di banyak aplikasi web. Dari profil pengguna hingga lampiran dokumen, kemampuan untuk menerima dan menyimpan file dari user sangat penting. Laravel membuat proses upload file menjadi sangat mudah dan aman dengan fungsionalitasnya yang powerful.

Pada tutorial ini, kita akan belajar cara membuat form upload file sederhana, memproses file yang diunggah, dan menyimpannya di server menggunakan Laravel.


 

1. Persiapan Awal

 

Pastikan kamu sudah memiliki proyek Laravel yang berjalan. Jika belum, buatlah yang baru:

Bash

composer create-project laravel/laravel upload-app
cd upload-app

 

2. Membuat Form Upload File (View)

 

Pertama, kita akan membuat tampilan yang berisi form untuk mengunggah file.

Buat file resources/views/upload.blade.php:

HTML

<!DOCTYPE html>
<html>
<head>
    <title>Upload File</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container mt-5">
        <h1>Upload File ke Server</h1>

        @if(session('success'))
            <div class="alert alert-success">
                {{ session('success') }}
            </div>
        @endif

        @if ($errors->any())
            <div class="alert alert-danger">
                <ul>
                    @foreach ($errors->all() as $error)
                        <li>{{ $error }}</li>
                    @endforeach
                </ul>
            </div>
        @endif

        <form action="{{ route('file.upload.post') }}" method="POST" enctype="multipart/form-data">
            @csrf
            <div class="mb-3">
                <label for="file" class="form-label">Pilih File:</label>
                <input type="file" class="form-control" id="file" name="file">
            </div>
            <button type="submit" class="btn btn-primary">Upload</button>
        </form>
    </div>
</body>
</html>

Poin Penting pada Form:

  • enctype="multipart/form-data": Atribut ini WAJIB ada pada tag <form> saat kamu mengunggah file. Tanpanya, file tidak akan terkirim ke server.
  • @csrf: Direktif Blade ini menghasilkan token CSRF (Cross-Site Request Forgery) untuk melindungi form kamu dari serangan.
  • name="file": Pastikan atribut name pada input type="file" sesuai dengan nama yang akan kamu gunakan di controller.

 

3. Membuat Controller untuk Memproses Upload

 

Selanjutnya, kita akan membuat controller yang akan menerima dan memproses file yang diunggah.

Buat controller baru:

Bash

php artisan make:controller FileUploadController

Edit file app/Http/Controllers/FileUploadController.php:

PHP

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage; // Import facade Storage

class FileUploadController extends Controller
{
    /**
     * Menampilkan form upload file.
     *
     * @return \Illuminate\Contracts\View\View
     */
    public function showUploadForm()
    {
        return view('upload');
    }

    /**
     * Memproses file yang diunggah.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function uploadFile(Request $request)
    {
        // 1. Validasi File
        $request->validate([
            'file' => 'required|file|mimes:jpeg,png,jpg,gif,svg,pdf,doc,docx|max:2048', // Maksimal 2MB
        ], [
            'file.required' => 'Pilih file yang akan diunggah.',
            'file.file' => 'Input harus berupa file.',
            'file.mimes' => 'Format file tidak didukung. Gunakan JPG, PNG, GIF, SVG, PDF, DOC, atau DOCX.',
            'file.max' => 'Ukuran file tidak boleh melebihi 2MB.',
        ]);

        // 2. Simpan File
        if ($request->hasFile('file')) {
            $file = $request->file('file');
            
            // Generate nama file unik
            $fileName = time() . '_' . $file->getClientOriginalName();
            
            // Simpan file ke direktori 'public/uploads'
            // Laravel akan secara otomatis membuat direktori ini jika belum ada
            $path = $file->storeAs('uploads', $fileName, 'public'); 

            // Simpan informasi file ke database (opsional)
            // Misalnya: File::create(['name' => $fileName, 'path' => $path]);

            return redirect()->back()->with('success', 'File berhasil diunggah! Nama File: ' . $fileName);
        }

        return redirect()->back()->with('error', 'Gagal mengunggah file.');
    }
}

Penjelasan Kode Controller:

  • use Illuminate\Support\Facades\Storage;: Mengimpor facade Storage yang sangat powerful untuk interaksi dengan sistem file.
  • $request->validate([...]): Ini adalah fitur validasi Laravel yang handal.
    • 'required': Pastikan file harus ada.
    • 'file': Pastikan input adalah file.
    • 'mimes:...': Membatasi tipe file yang diizinkan.
    • 'max:2048': Membatasi ukuran file maksimal (dalam kilobyte, jadi 2048KB = 2MB).
  • $request->hasFile('file'): Memeriksa apakah ada file yang diunggah dengan nama file.
  • $file = $request->file('file'): Mengambil objek file yang diunggah.
  • $fileName = time() . '_' . $file->getClientOriginalName(): Membuat nama file yang unik untuk menghindari konflik. time() menambahkan timestamp dan getClientOriginalName() mengambil nama asli file.
  • $file->storeAs('uploads', $fileName, 'public'): Ini adalah metode utama untuk menyimpan file.
    • 'uploads': Direktori tempat file akan disimpan di dalam disk yang ditentukan.
    • $fileName: Nama file setelah disimpan.
    • 'public': Nama disk yang akan digunakan. Secara default, ini merujuk ke direktori storage/app/public.

 

4. Konfigurasi Storage Link

 

Secara default, disk public menyimpan file di storage/app/public. Namun, untuk membuat file-file ini bisa diakses dari web browser (misalnya gambar), kita perlu membuat symlink dari public/storage ke storage/app/public.

Jalankan perintah ini sekali di terminal:

Bash

php artisan storage:link

Perintah ini akan membuat folder public/storage yang mengarah ke storage/app/public. Sekarang, jika kamu mengunggah gambar misalnya, kamu bisa mengaksesnya di http://127.0.0.1:8000/storage/uploads/nama_file_kamu.jpg.

 

5. Mendefinisikan Routes

 

Terakhir, definisikan routes untuk menampilkan form dan memproses upload.

Edit routes/web.php:

PHP

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\FileUploadController;

Route::get('/', function () {
    return view('welcome');
});

// Route untuk menampilkan form upload
Route::get('/upload', [FileUploadController::class, 'showUploadForm']);

// Route untuk memproses upload file (POST request)
Route::post('/upload', [FileUploadController::class, 'uploadFile'])->name('file.upload.post');

 

6. Menguji Aplikasi

 

  1. Pastikan server pengembangan Laravel berjalan: php artisan serve
  2. Buka browser dan kunjungi http://127.0.0.1:8000/upload.
  3. Pilih file (gambar atau dokumen) dan klik “Upload”.
  4. Jika berhasil, kamu akan melihat pesan sukses. Periksa direktori storage/app/public/uploads di proyek kamu untuk memastikan file sudah tersimpan di sana.

Sekarang, kamu sudah memiliki fungsionalitas upload file yang kokoh di aplikasi Laravel kamu. Ini adalah pondasi penting untuk berbagai fitur, mulai dari manajemen foto hingga penyimpanan dokumen pengguna. Dengan Laravel, proses yang dulunya rumit kini menjadi jauh lebih sederhana dan aman. Selamat mencoba!

Wawasan Terbaru

Gemini_Generated_Image_wfw5uwwfw5uwwfw5
Mengenal Dunia Grafis: Dari Piksel Hingga Vektor, Kekuatan Visual di Era Digital
Gemini_Generated_Image_b6dimfb6dimfb6di
Mengenal Foundation: Kerangka Kerja Front-End Profesional untuk Web Responsif
Gemini_Generated_Image_sx3ztpsx3ztpsx3z
CSS
Mempercantik Website dengan CSS: Seniman di Balik Tampilan Web 🎨
Gemini_Generated_Image_e013qke013qke013
Mengenal HTML: Fondasi dari Setiap Halaman Website 🌐
Gemini_Generated_Image_ldki4nldki4nldki
Menyelami Dunia Coding: Seni Berbicara dengan Komputer
Gemini_Generated_Image_dpvliydpvliydpvl
Menguasai GIT: Fondasi Penting dalam Dunia Pengembangan Perangkat Lunak
Gemini_Generated_Image_sqcib9sqcib9sqci
Tutorial Python #12: Mengenal Jenis-jenis Operator dalam Python
Gemini_Generated_Image_o1bw3do1bw3do1bw
Memahami Tipe Data Dictionary dalam Python
Gemini_Generated_Image_ko4ixfko4ixfko4i
Mengenal Tipe Data Set dalam Python
Gemini_Generated_Image_1xop7m1xop7m1xop
Tuple dalam Python: Pengenalan dan Tutorial

Wawasan Serupa

Gemini_Generated_Image_q0o3sbq0o3sbq0o3
Gemini_Generated_Image_mem6cgmem6cgmem6
Gemini_Generated_Image_ust09gust09gust0
Gemini_Generated_Image_d8a5kwd8a5kwd8a5

Ceritakan Detail Proyekmu

Mulai dari 30K aja, solusi IT kamu langsung jalan tanpa drama.

Kata Mereka Tentang Solusi Coding

Dipercaya oleh lebih dari 200++ client untuk menyelesaikan proyeknya dengan total 250++ proyek dari berbagai jenis proyek