Mengganti foto produk atau menghapus data harus disertai dengan penghapusan file gambar di storage, agar storage server tidak penuh oleh file sampah. Laravel menyediakan cara efisien untuk melakukan ini melalui helper File
atau Storage
.
Tujuan Part 4
- Menangani update gambar produk + hapus file lama
- Hapus gambar dari server saat data dihapus
- Gunakan
Storage
atauFile
Laravel dengan aman - Hindari penumpukan file tak terpakai
Struktur Penyimpanan File
Di part sebelumnya kita menyimpan foto ke:
/public/uploads/produk/
Contoh path hasil upload:
public/uploads/produk/1718545800.jpg
1. Update Produk dengan Ganti Gambar
Edit update()
di ProdukController.php
:
use Illuminate\Support\Facades\File;
public function update(Request $request, $id)
{
$request->validate([
'nama' => 'required',
'harga' => 'required|numeric',
'foto' => 'nullable|image|mimes:jpeg,png,jpg|max:2048'
]);
$produk = Produk::findOrFail($id);
$fotoLama = $produk->foto;
// Jika ada foto baru diunggah
if ($request->hasFile('foto')) {
// Hapus file lama jika ada
if ($fotoLama && File::exists(public_path('uploads/produk/' . $fotoLama))) {
File::delete(public_path('uploads/produk/' . $fotoLama));
}
// Simpan file baru
$fotoBaru = time() . '.' . $request->foto->extension();
$request->foto->move(public_path('uploads/produk'), $fotoBaru);
$produk->foto = $fotoBaru;
}
// Update data lainnya
$produk->nama = $request->nama;
$produk->harga = $request->harga;
$produk->save();
return redirect()->route('produk.index');
}
2. Hapus Produk & File Gambar
Edit destroy()
di ProdukController.php
:
public function destroy($id)
{
$produk = Produk::findOrFail($id);
// Hapus file gambar jika ada
if ($produk->foto && File::exists(public_path('uploads/produk/' . $produk->foto))) {
File::delete(public_path('uploads/produk/' . $produk->foto));
}
$produk->delete();
return redirect()->route('produk.index');
}
Keamanan: Cek Eksistensi File
Pastikan selalu gunakan:
File::exists(path) && File::delete(path)
Agar tidak muncul error jika file sudah tidak ada atau pernah dipindahkan.
Alternatif: Gunakan Storage Laravel
Jika kamu menggunakan Laravel Storage:
use Illuminate\Support\Facades\Storage;
Storage::delete('public/produk/' . $produk->foto);
Tentu pastikan kamu menyimpan foto dengan:
$request->foto->storeAs('public/produk', $namaFile);
Best Practice
Hal | Rekomendasi |
---|---|
Nama file unik | Gunakan time() , UUID, atau Str::random() |
Hindari overwrite file | Jangan simpan dengan nama yang sama kecuali dibutuhkan |
Validasi ekstensi dan size | Batasi mimes:jpg,png dan max:2048 |
Soft delete | Gunakan jika ingin backup sebelum file benar-benar dihapus (optional) |
Elektra Network Vision โ Konsultan Laravel & File Manajemen
Kami bantu Anda:
- Sistem manajemen file Laravel (upload, update, delete)
- Integrasi penyimpanan cloud (Amazon S3, Wasabi)
- Otomasi pembersihan storage file tidak terpakai
elektranetworkvision.com โ Spesialis sistem Laravel profesional, cocok untuk UMKM hingga enterprise.