Langsung ke konten utama

Menangani Upload File Besar di Laravel dengan Strategi Chunk Upload

Pendahuluan

Bayangin lagi ngerjain fitur upload video 1GB di project Laravel, tapi tiba-tiba request-nya terputus karena server timeout. Biasanya kita frustrasi karena setting post_max_size di PHP.ini udah dinaikin tapi masih aja gagal di tengah jalan. Solusinya bukan cuma mainin limit server, tapi memecah file jadi bagian-bagian kecil (chunk) agar proses upload jauh lebih tangguh.

Tips & Best Practices

  • Di banyak project, biasanya saya mulai dari bikin mekanisme verifikasi hash. Jangan asal terima potongan file, pastikan ada checksum MD5 agar kita tahu tiap chunk sampai dengan utuh tanpa corrupt.
  • Untuk manajemen storage, saya selalu pisahin direktori temporary buat chunk yang belum selesai. Jangan simpan langsung di folder storage/app/uploads biar aplikasi nggak berantakan pas proses penggabungan gagal.
  • Biasanya saya pakai event-driven approach untuk proses penggabungan. Pas chunk terakhir sampai, trigger background job biar user nggak nunggu lama di browser padahal file lagi di-merge di background.

Contoh Kode

Ini cara saya nangkap chunk di Controller buat nyusun file jadi satu kesatuan:

public function upload(Request $request) {
$chunk = $request->file('file');
$path = storage_path('app/temp/' . $request->uid);

// Nambahin chunk ke file utama tanpa harus load semua ke RAM
file_put_contents($path, file_get_contents($chunk->getRealPath()), FILE_APPEND);

if ($request->is_last) {
// Pindahkan ke lokasi final setelah semua chunk lengkap
Storage::move('temp/' . $request->uid, 'uploads/' . $request->name);
}
return response()->json(['status' => 'chunk_received']);
}

Variasi Implementasi

Pilihan ada dua: pakai library pihak ketiga kayak Resumable.js di front-end yang udah handle retry otomatis, atau nulis custom logic pakai Axios kalau mau lebih ringan. Kalau project-nya kompleks dan butuh reliability tinggi, saya lebih suka pakai tus.io protocol karena dia emang standar industri buat upload file yang bisa dijeda dan dilanjutin (resumable).

Kesalahan Umum

  • Lupa ngebersihin folder temporary, akhirnya disk penuh gara-gara sisa chunk yang gagal upload.
  • Nggak ngecek apakah disk space mencukupi sebelum merge file.
  • Terlalu mengandalkan session, padahal kalau network drop, session sering nggak ke-save dengan baik.
  • Nggak ada mekanisme retry di sisi client kalau chunk gagal di-upload.
  • Pake cara sinkron (blocking) buat merge file besar, yang bikin aplikasi berasa nge-hang buat user lain.

Ringkasan

Intinya, handling file besar bukan soal gimana kita paksa server nerima beban berat, tapi gimana kita bisa bagi beban itu jadi kecil-kecil biar lebih kalem dikelola. Setelah ngalamin sendiri gagal upload berkali-kali, saya sadar kalau ketenangan user lebih penting daripada sekadar kodingan yang kelihatan simpel.

Komentar

Postingan populer dari blog ini

Fungsi lain tombol penerima panggilan di headset

Kegunaan tombol yang berada di headset utamanya adalah untuk menerima panggilan dan pause panggilan. Dan headset itu sendiri, kadang juga digunakan untuk mendengarkan music, digunakan bersama saat main game, supaya suara yang dikeluarkan oleh gadget tidak terlalu keras sehingga mengurangi beban gadget. Dengan mengurangi beban gadget, ada beberapa yang beranggapan kalau itu akan menghemat batere.

Cara Reset Password Database MySQL Menggunakan Laragon

Cara Reset Password Database MySQL Menggunakan Laragon Laragon adalah salah satu lingkungan pengembangan lokal (local development environment) yang populer di antara para pengembang web. Dalam beberapa kasus, mungkin kita perlu mereset password database MySQL pada Laragon jika lupa password atau untuk alasan keamanan tertentu. Berikut adalah langkah-langkah yang dapat kita ikuti untuk melakukan reset password database MySQL menggunakan Laragon:

Apa Itu R dan L di Headset? Ini Dia Perbedaan dan Fungsinya yang Perlu Anda Ketahui

Arti R dan L di Headset: Apa Perbedaannya? Headset adalah alat yang digunakan untuk mendengarkan suara dari sumber audio seperti ponsel, komputer, atau pemutar musik. Headset biasanya terdiri dari dua bagian, yaitu earphone yang dimasukkan ke dalam telinga dan mikrofon yang digunakan untuk berbicara. Pada earphone, kita sering melihat ada tulisan R dan L. Apa arti dan perbedaan dari kedua huruf tersebut?