Upload gambar adalah fitur yang hampir selalu ada di aplikasi web โ foto profil, thumbnail artikel, produk, dan lain-lain. Laravel menyediakan cara yang rapi dan aman untuk menanganinya. Artikel ini membahas upload gambar dari form sampai menampilkannya, lengkap dengan validasi.
Langkah 1: Siapkan Form Upload
Form upload wajib memakai enctype="multipart/form-data":
<form action="/upload" method="POST" enctype="multipart/form-data">
@csrf
<input type="file" name="gambar">
<button type="submit">Upload</button>
</form>
Langkah 2: Validasi File di Controller
Selalu validasi tipe dan ukuran file demi keamanan โ jangan percaya input pengguna:
public function store(Request $request)
{
$request->validate([
'gambar' => 'required|image|mimes:jpg,jpeg,png,webp|max:2048', // max 2MB
]);
// simpan ke storage/app/public/uploads
$path = $request->file('gambar')->store('uploads', 'public');
// simpan $path ke database bila perlu
return back()->with('success', 'Gambar berhasil diupload!');
}
Aturan image memastikan file benar-benar gambar, mimes membatasi format, dan max:2048 membatasi ukuran (dalam kilobyte).
Langkah 3: Buat Symbolic Link Storage
Agar file di storage/app/public bisa diakses publik, jalankan sekali:
php artisan storage:link
Perintah ini membuat shortcut dari public/storage ke storage/app/public.
Langkah 4: Menampilkan Gambar
Gunakan helper asset() dengan prefix storage/:
<img src="{{ asset('storage/' . $path) }}" alt="Gambar">
Langkah 5: Memberi Nama File Sendiri (Opsional)
Kalau ingin nama file unik dan rapi, misalnya berdasarkan waktu:
$file = $request->file('gambar');
$namaFile = 'img_' . uniqid() . '.' . $file->getClientOriginalExtension();
$path = $file->storeAs('uploads', $namaFile, 'public');
Langkah 6: Menghapus Gambar Lama
Saat mengganti atau menghapus data, hapus juga filenya agar storage tidak menumpuk:
use Illuminate\Support\Facades\Storage;
Storage::disk('public')->delete($path);
Tips Keamanan
- Selalu batasi
mimesdanmaxukuran file. - Jangan simpan file upload langsung di folder
publictanpa validasi. - Untuk gambar besar, pertimbangkan me-resize agar hemat storage dan mempercepat loading.
Kesimpulan
Upload gambar di Laravel aman dan mudah selama Anda memvalidasi tipe & ukuran, menyimpan lewat store(), dan menjalankan storage:link. Dengan pola di atas, Anda bisa menangani foto profil, thumbnail, atau galeri produk dengan rapi. Untuk mempercepat loading gambar di situs, lihat juga panduan kami tentang optimasi performa Laravel.