Panduan File Upload Laravel untuk Penanganan Berkas
File Upload Laravel merupakan bagian penting dalam pengembangan aplikasi modern yang memerlukan pengelolaan berkas seperti foto profil, dokumen, maupun media lain. Laravel menyediakan fungsi bawaan untuk menangani upload file dengan mudah, aman, dan terstruktur tanpa perlu membuat logika manual dari awal. Proses upload ini juga dapat digabungkan dengan validasi untuk memastikan file sesuai format dan ukuran yang diinginkan.
Framework Laravel tidak hanya memfasilitasi proses penyimpanan file, tetapi juga menawarkan integrasi dengan berbagai sistem storage mulai dari direktori lokal hingga cloud seperti Amazon S3. Dengan pendekatan yang fleksibel ini, developer dapat mengatur alur pengunggahan file sesuai kebutuhan bisnis, termasuk mengatur lokasi penyimpanan, penamaan file, serta publikasi akses pada pengguna.
Konsep Dasar File Upload
Untuk mengunggah file, Laravel memanfaatkan Request dan fungsi store(), move(), atau storeAs(). File dikirim melalui form HTML dengan tipe multipart/form-data, sehingga server dapat menerima file selain data teks dari pengguna.
Sebelum menyimpan file, sangat disarankan melakukan validasi untuk memastikan tipe file dan ukuran sesuai kebutuhan.
Form HTML untuk Upload File
Contoh form sederhana pada Blade:
<form action="{{ route('upload.store') }}" method="POST" enctype="multipart/form-data">
@csrf
<input type="file" name="photo">
<button type="submit">Upload</button>
</form>
Atribut enctype="multipart/form-data" wajib ada agar file bisa dikirim melalui form.
Validasi File Sebelum Upload
Validasi dapat dilakukan melalui controller:
$request->validate([
'photo' => 'required|file|mimes:jpg,png,jpeg|max:2048'
]);
Validasi di atas memastikan bahwa file:
- Wajib ada (
required) - Adalah file (
file) - Bertipe gambar (
mimes) - Ukurannya tidak lebih dari 2MB (
max:2048dalam KB)
Menyimpan File ke Storage Lokal
Cara menyimpan file menggunakan metode store():
$path = $request->file('photo')->store('photos');
File akan disimpan ke direktori:
storage/app/photos
Jika ingin menampilkan file tersebut secara publik, diperlukan symbolic link.
Membuat Storage Public Link
Agar file dapat diakses dari browser:
php artisan storage:link
Dengan ini, file dari storage/app/public akan tersedia di public/storage.
Untuk upload langsung ke public storage:
$path = $request->file('photo')->store('photos', 'public');
File tersimpan di:
storage/app/public/photos
Dapat ditampilkan di view menggunakan URL:
storage/photos/nama-file.jpg
Mengatur Nama File Sendiri
Jika ingin menentukan nama file, gunakan storeAs():
$filename = time() . '.' . $request->photo->extension();
$request->photo->storeAs('photos', $filename, 'public');
Pendekatan ini memastikan nama file tidak bentrok saat disimpan.
Menyimpan File ke Folder Public
Alternatif manual menggunakan move():
$filename = time() . '.' . $request->photo->extension();
$request->photo->move(public_path('uploads'), $filename);
File kemudian akan tersedia pada:
public/uploads
Metode ini cocok untuk upload yang sifatnya publik.
Menghapus File dari Storage
Untuk menghapus file menggunakan Storage:
use IlluminateSupportFacadesStorage;
Storage::disk('public')->delete('photos/'.$filename);
Ini membantu menjaga storage tetap bersih ketika ada update atau delete data.
Keamanan Upload File
Untuk menghindari eksploitasi atau upload file berbahaya, langkah keamanan berikut wajib diperhatikan:
- Validasi tipe file (mimes atau mimetype)
- Batasi ukuran file
- Simpan file di luar folder
publicbila memungkinkan - Hindari menampilkan nama file dari input user langsung
Laravel sudah menyediakan fungsi validasi sehingga risiko dapat diminimalkan.
Kesimpulan
File Upload adalah kemampuan penting dalam aplikasi web modern dan Laravel telah menyediakan mekanisme yang aman dan fleksibel untuk menanganinya. Dengan dukungan validasi, penamaan dinamis, symbolic link, serta sistem storage yang terintegrasi, proses pengembangan upload file menjadi lebih efisien, terstruktur, dan aman. Pemahaman mengenai konfigurasi dan metode penyimpanan sangat membantu dalam membangun aplikasi yang profesional dan skalabel.
Lanjut Baca: Mengenal Storage Public di Laravel: Konsep, Konfigurasi, dan Implementasi