Kami Hadir Membantu Anda Dalam Pengembangan Usaha Anda

Ketapang, Kalimantan Barat elektranetworkvision@gmail.com
Posted On June 21, 2025

Belajar Laravel dari Nol – Part 3: Upload Gambar & Validasi File di Laravel untuk Pemula

elektra_network 0 comments

Mengizinkan pengguna mengunggah gambar adalah fitur dasar tapi kritis dalam banyak aplikasi. Laravel menyediakan dukungan lengkap untuk menangani upload file, menyimpan ke storage, serta melakukan validasi tipe dan ukuran file.


🎯 Tujuan Part 3

  • Membuat form upload gambar di Laravel
  • Menyimpan gambar ke direktori public atau storage
  • Validasi file (ukuran, tipe, wajib/tidak)
  • Menampilkan gambar yang telah diupload

🧰 Studi Kasus: Upload Foto Produk

Setiap produk akan memiliki:

  • nama (string)
  • harga (integer)
  • foto (string / path file)

🔧 1. Update Migration dan Model

a. Migration

Edit file xxxx_create_produks_table.php:

$table->string('foto')->nullable(); // untuk simpan nama file

Jalankan:

php artisan migrate:refresh

b. Model

Tambahkan ke app/Models/Produk.php:

protected $fillable = ['nama', 'harga', 'foto'];

🖥️ 2. Form Upload Gambar

Edit create.blade.php atau edit.blade.php:

<form action="{{ route('produk.store') }}" method="POST" enctype="multipart/form-data">
  @csrf
  <input type="text" name="nama" placeholder="Nama Produk" required>
  <input type="number" name="harga" placeholder="Harga" required>
  
  <input type="file" name="foto" accept="image/*">
  <button type="submit">Simpan</button>
</form>

⚠️ Penting: enctype="multipart/form-data" wajib untuk upload file.


✅ 3. Validasi & Simpan File

Edit method store() di ProdukController.php:

public function store(Request $request)
{
    $request->validate([
        'nama'  => 'required',
        'harga' => 'required|numeric',
        'foto'  => 'nullable|image|mimes:jpeg,png,jpg|max:2048'
    ]);

    $fotoName = null;
    if ($request->hasFile('foto')) {
        $fotoName = time() . '.' . $request->foto->extension();
        $request->foto->move(public_path('uploads/produk'), $fotoName);
    }

    Produk::create([
        'nama' => $request->nama,
        'harga' => $request->harga,
        'foto' => $fotoName
    ]);

    return redirect()->route('produk.index');
}

📸 4. Menampilkan Gambar

Edit index.blade.php:

@foreach($produk as $p)
  <tr>
    <td>{{ $p->nama }}</td>
    <td>{{ $p->harga }}</td>
    <td>
      @if($p->foto)
        <img src="{{ asset('uploads/produk/' . $p->foto) }}" width="80">
      @else
        <small>Tidak ada gambar</small>
      @endif
    </td>
  </tr>
@endforeach

🧠 Tips & Best Practice

AspekRekomendasi
ValidasiSelalu validasi image, mimes, dan max:
Nama file unikGunakan time(), Str::uuid(), atau Hash::make() untuk hindari tabrakan
Folder uploadGunakan folder public/uploads/... untuk akses langsung
Gambar defaultSediakan gambar default jika foto == null
StorageUntuk skala besar, gunakan Storage::disk('s3')->put() dll

☁️ Alternatif Penyimpanan: Laravel Storage

Jika ingin menyimpan gambar di storage/app/public, gunakan:

$request->foto->storeAs('public/produk', $fotoName);

Dan akses dengan:

<img src="{{ asset('storage/produk/' . $p->foto) }}">

Pastikan sudah publish link:

php artisan storage:link

🧰 Elektra Network Vision – Spesialis Media Upload Laravel

Kami bantu Anda:

  • Upload & manajemen file Laravel
  • Integrasi cloud (S3, Google Drive, Wasabi)
  • Kompresi & resize gambar otomatis

🌐 elektranetworkvision.com — Mitra Laravel terbaik untuk performa dan efisiensi.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post

📄 Belajar Laravel dari Nol – Part 11: Export Data ke Excel dan PDF

Export data ke file Excel (.xlsx) dan PDF (.pdf) sangat dibutuhkan dalam aplikasi berbasis data,…

Kapan Outsourcing Developer Tepat untuk Perusahaan Anda di 2025?

Kapan Outsourcing Developer Tepat untuk Perusahaan Anda 🤝 Kapan Sebaiknya Perusahaan Anda Memilih Outsourcing Developer:…

📥 Belajar Laravel dari Nol – Part 12: Import Data dari Excel ke CouchDB dan MongoDB

Import data dari file Excel sangat penting untuk mengisi data awal aplikasi. Pada part ini…