Laravel upload adalah proses mengirimkan file dari komputer pengguna ke server web menggunakan framework Laravel. Framework ini menyediakan fitur yang mudah digunakan untuk mengelola file yang diunggah, termasuk validasi file yang diunggah, penyimpanan file di server, dan penanganan kesalahan yang terkait dengan file yang diunggah.
Untuk mengunggah file menggunakan Laravel, kamu dapat membuat formulir HTML untuk memungkinkan pengguna memilih file dan kemudian menangani permintaan pengguna menggunakan kontroler Laravel. Berikut adalah contoh kode sederhana yang dapat kamu gunakan untuk mengunggah file dengan Laravel:
Langkah 1: Membuat Form Upload
Pertama-tama, kita perlu membuat form upload di Laravel. Form upload ini akan memiliki input file, yang akan digunakan untuk memilih file yang akan diupload.
<form method="POST" action="/upload" enctype="multipart/form-data"> @csrf <input type="file" name="file"> <button type="submit">Upload</button> </form>
Langkah 2: Menerima dan Validasi File
Kemudian, kita perlu menerima file yang diupload oleh pengguna dan memvalidasi bahwa file tersebut benar-benar merupakan file yang diizinkan. Untuk melakukan ini, kita dapat menggunakan metode validate pada objek Request yang menerima permintaan.
public function upload(Request $request) { $request->validate([ 'file' => 'required|mimes:jpeg,png,jpg,gif,svg|max:2048', ]); // Lakukan sesuatu dengan file yang diupload }
Dalam contoh di atas, kami mengizinkan hanya file dengan tipe MIME yang diizinkan (jpeg, png, jpg, gif, svg) dan ukuran file maksimum adalah 2048 kilobita.
Langkah 3: Menyimpan File di Server
Setelah kita validasi file, kita dapat menyimpan file di server menggunakan metode store pada objek UploadedFile. kamu dapat menyimpan file di folder apa saja, namun dalam contoh ini, kita akan menyimpan file di folder public/uploads.
public function upload(Request $request) { $request->validate([ 'file' => 'required|mimes:jpeg,png,jpg,gif,svg|max:2048', ]); $fileName = time().'.'.$request->file->extension(); $request->file->storeAs('uploads', $fileName, 'public'); return response()->json(['message' => 'File berhasil diupload']); }
Dalam contoh di atas, kita membuat nama file baru dengan menambahkan time() ke nama file yang diupload. Kemudian, kita menggunakan metode storeAs pada objek UploadedFile untuk menyimpan file dengan nama yang baru di folder public/uploads.
Langkah 4: Menampilkan File yang Diupload
Terakhir, kita dapat menampilkan file yang diupload di browser. Untuk melakukan ini, kita dapat membuat rute baru yang mengembalikan file yang diminta.
Route::get('/uploads/{fileName}', function ($fileName) { $path = storage_path('app/public/uploads/' . $fileName); if (!File::exists($path)) { abort(404); } $file = File::get($path); $type = File::mimeType($path); $response = Response::make($file, 200); $response->header("Content-Type", $type); return $response; });
Dalam contoh di atas, kita membuat rute baru yang mengembalikan file yang diminta dari folder public/uploads. Kita menggunakan fungsi File::exists untuk memeriksa apakah file yang diminta ada atau tidak. Jika file tidak ditemukan, kita mengirimkan respons 404. Jika file ditemukan, kita mengembalikan file dan jenis MIME yang sesuai dalam respons HTTP.
Penjelasan kode:
Kita membuat rute baru dengan URL /download/{filename} dan menentukan fungsi yang akan dipanggil saat rute diakses.
Dalam fungsi tersebut, kita memeriksa apakah file yang diminta ada atau tidak di dalam folder public/uploads. Jika file tidak ditemukan, kita mengirimkan respons 404.
Jika file ditemukan, kita menggunakan fungsi Storage::get() untuk membaca file dan kemudian menggunakan fungsi Storage::mimeType() untuk mendapatkan jenis MIME dari file tersebut.
Selanjutnya, kita menentukan header respons dengan jenis MIME file yang benar.
Terakhir, kita menggunakan fungsi response()->download() untuk mengirimkan file ke pengguna. Fungsi ini akan menampilkan dialog unduhan di browser pengguna dan mengirimkan file yang diminta.
Untuk mengaktifkan unduhan file, kamu dapat menambahkan tautan unduh ke file yang diupload dalam tampilan kamu, menggunakan URL rute baru ini. Contoh tautan unduh:
<a href="{{ route('file.download', ['filename' => $file->filename]) }}">Download File</a>
Catatan: Pastikan bahwa folder public/uploads memiliki izin yang tepat agar dapat diakses dan ditulis oleh server web kamu. Kamu juga harus menambahkan middleware web ke rute kamu jika kamu belum melakukannya.
Happy Coding!!!!
Komentar
Posting Komentar