Mengunggah file adalah salah satu fitur umum yang diperlukan dalam aplikasi web. Laravel, sebagai salah satu framework PHP yang populer, menyediakan API yang mudah digunakan untuk mengelola pengunggahan file. Dalam tutorial ini, kita akan mempelajari cara membuat fitur pengunggahan file, termasuk pengaturan form HTML, validasi, serta penanganan dan penyimpanan file di server.


1. Persiapan Proyek Laravel

Pastikan kamu memiliki proyek Laravel yang sudah diinstal. Jika belum, kamu dapat membuat proyek baru menggunakan Composer dengan perintah berikut:

composer create-project --prefer-dist laravel/laravel file-upload-tutorial

Setelah proyek berhasil dibuat, buka direktori proyek kamu:

cd file-upload-tutorial

2. Membuat Form Pengunggahan File

Buat form HTML untuk mengunggah file. Kita akan menggunakan Blade, template engine bawaan Laravel.

Buat sebuah route dan view untuk menampilkan form:

Routes ('routes/web.php'):

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

Route::get('/upload', [FileUploadController::class, 'create']);
Route::post('/upload', [FileUploadController::class, 'store']);

Controller:

Buat controller menggunakan Artisan command:

php artisan make:controller FileUploadController

FileUploadController ('app/Http/Controllers/FileUploadController.php'):

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class FileUploadController extends Controller
{
	public function create()
	{
		return view('upload');
	}

	public function store(Request $request)
	{
		// Validasi
		$request->validate([
				'file' => 'required|file|mimes:jpg,png,pdf|max:2048',
		]);

		// Simpan file ke storage
		$filePath = $request->file('file')->store('uploads');

		return back()->with('success', 'File berhasil diunggah!')->with('file', $filePath);
	}
}

View ('resources/views/upload.blade.php'):

Buat file Blade untuk menampilkan form pengunggahan.


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Upload File</title>
</head>
<body>
    <h1>Unggah File</h1>

    <!-- Menampilkan pesan sukses -->
    @if(session('success'))
        <p>{{ session('success') }}</p>
        <p>File Path: {{ session('file') }}</p>
    @endif

    <!-- Menampilkan pesan error -->
    @if ($errors->any())
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    @endif

    <!-- Form Pengunggahan -->
    <form action="/upload" method="post" enctype="multipart/form-data">
        @csrf
        <div>
            <label for="file">Pilih file:</label>
            <input type="file" name="file" id="file" required>
        </div>
        <button type="submit">Unggah</button>
    </form>
</body>
</html>

3. Menangani Pengunggahan File

Di controller store, kita melakukan beberapa langkah penting:

  • Validasi: Memastikan file diunggah, dan mengecek tipe serta ukuran file menggunakan aturan validasi Laravel.
    
    $request->validate([
    		'file' => 'required|file|mimes:jpg,png,pdf|max:2048',
    ]);

    Aturan mimes memastikan bahwa file yang diunggah memiliki ekstensi jpg, png, atau pdf, dan < class="bold_code">max

  • Penyimpanan File: Menggunakan method store untuk menyimpan file ke direktori storage/app/uploads
    $filePath = $request->file('file')->store('uploads');

4. Konfigurasi Penyimpanan

Secara default, file akan disimpan di direktori storage/app. kamu bisa mengubah konfigurasi penyimpanan di file config/filesystems.php.


5. Testing

Jalankan server Laravel:

php artisan serve

Buka browser dan akses http://localhost:8000/upload. kamu akan melihat form untuk mengunggah file. Cobalah unggah file dan pastikan tidak ada error. Jika berhasil, kamu akan melihat pesan sukses dan path file yang diunggah.


6. Menampilkan File yang Diunggah

Untuk menampilkan atau mengunduh file yang diunggah, kamu bisa mengarahkan path file ke route atau menyimpannya ke database untuk diakses nanti.

Menyajikan File ('routes/web.php'):

Tambahkan route untuk menampilkan file:


Route::get('/uploads/{filename}', function ($filename) {
	$path = storage_path('app/uploads/' . $filename);

	if (!File::exists($path)) {
			abort(404);
	}

	return response()->download($path);
});

Dengan route ini, kamu bisa mengakses file yang diunggah melalui URL http://localhost:8000/uploads/nama_file.


Kesimpulan

Mengunggah file di Laravel sangatlah mudah dengan menggunakan fitur built-in seperti validasi dan storage. Dengan mengikuti tutorial ini, kamu telah mempelajari cara membuat form pengunggahan file, melakukan validasi, dan menyimpan file di server. kamu juga sudah belajar cara mengatur penyimpanan dan mengakses file yang diunggah.