Upload File Laravel Storage (Lengkap & Aman untuk Production)
Upload file adalah fitur wajib di hampir semua aplikasi web. Mulai dari upload avatar, gambar artikel, sampai dokumen penting.
Di Laravel, untungnya semua ini sudah disiapkan rapi lewat Laravel Storage.
Di artikel ini kita bakal bahas cara upload file Laravel menggunakan storage dari nol sampai siap production, bukan cuma asal jalan.
Kenapa Pakai Laravel Storage?
Sebelum ngoding, penting tahu dulu kenapa Laravel Storage itu recommended:
✅ Sudah aman (handling path & filename)
✅ Bisa simpan ke local, public, S3, dll
✅ Mudah di-maintain
✅ Support rename otomatis
✅ Lebih rapi daripada move_uploaded_file()
Intinya: lebih clean, aman, dan scalable.
Struktur Folder Storage Laravel
Secara default, Laravel punya folder:
storage/ ├── app/ │ ├── public/ │ └── private/
storage/app/public→ untuk file yang bisa diakses publikstorage/app→ untuk file private
Agar file bisa diakses dari browser, kita perlu symlink dulu.
Generate Storage Link
Jalankan perintah ini sekali saja:
php artisan storage:link
Setelah itu Laravel akan membuat:
public/storage -> storage/app/public
Tanpa ini, file kamu tidak akan bisa diakses lewat URL.
Form Upload File (Blade)
Contoh form upload sederhana:
<form action="{{ route('upload') }}" method="POST" enctype="multipart/form-data">
@csrf
<input type="file" name="image">
<button type="submit">Upload</button>
</form>
⚠️ Wajib pakai enctype="multipart/form-data"
Kalau lupa, file tidak akan terkirim.
Validasi File Upload Laravel
Jangan pernah upload file tanpa validasi ❌
$request->validate([
'image' => 'required|image|mimes:jpg,jpeg,png|max:2048',
]);
Artinya:
image→ hanya file gambarmimes→ ekstensi yang diizinkanmax→ ukuran maksimal (KB)
Ini penting banget buat keamanan.
Upload File ke Storage Laravel
Contoh upload ke folder public/uploads:
$file = $request->file('image');
$path = $file->store('uploads', 'public');
Laravel otomatis:
- generate nama file unik
- simpan ke
storage/app/public/uploads
Nilai $path biasanya seperti:
uploads/abc123xyz.jpg
Upload dengan Nama File Custom
Kalau mau nama file sendiri:
$filename = time() . '.' . $file->extension();
$path = $file->storeAs(
'uploads',
$filename,
'public'
);
Cocok kalau:
- mau pakai slug
- mau konsisten dengan database
Simpan Path ke Database
Biasanya path file disimpan ke database:
Post::create([
'title' => $request->title,
'image' => $path,
]);
Di Blade:
<img src="{{ asset('storage/' . $post->image) }}" alt="">
Simple, bersih, dan aman.
Hapus File Lama Saat Update
Ini sering dilupakan ❌
Padahal penting supaya storage tidak penuh.
use Illuminate\Support\Facades\Storage;
if ($post->image) {
Storage::disk('public')->delete($post->image);
}
Lalu upload file baru seperti biasa.
Upload Multiple File Laravel
Kalau upload banyak file:
<input type="file" name="images[]" multiple>
Controller:
foreach ($request->file('images') as $file) {
$file->store('uploads', 'public');
}
Best Practice Upload File Laravel
Beberapa tips penting 🔥
✅ Selalu validasi file
✅ Jangan simpan file di folder public langsung
✅ Simpan path, bukan URL, di database
✅ Hapus file lama saat update / delete data
✅ Batasi ukuran file
Kesimpulan
Upload file Laravel dengan storage itu:
- ✅ Mudah
- ✅ Aman
- ✅ Rapi
- ✅ Siap production
Kalau kamu masih upload pakai cara manual, sekarang saatnya pindah ke Laravel Storage.