Terdapat pelbagai cara untuk membolehkan sesuatu aplikasi itu mempunyai fungsi upload gambar atau fail. Berikut adalah salah satu caranya.
Masukkan input element pada fail blade:
<label for="avatar">Select a file:</label><input type="file" id="avatar" name="avatar">
Masukkan code berikut pada bahagian controller
$file = request()->file('avatar');// current datetime + hashname$filename = $user->id."_".$file->hashName();// save file in year month date - easier for archive in future$directory = "avatar/{$user->created_at->format('Y/m/d')}";$dir = $file->storeAs($directory,$filename,'media');
Pastikan anda semak configure config\filesystems.php
untuk memastikan dimana fail ini akan disimpan. Untuk memudahkan urusan, anda hanya biarkan nilainya secara default iaitu fail anda akan disimpan di storage\app\public
. Berdasarkan code diatas, file akan disimpan di storage/avatar/TAHUN/BULAN/TARIKH/NAMA_FAIL.jpg
Walau bagaimanapun, terdapat satu lagi command yang perlu anda jalankan untuk memastikan fail anda dapat diakses oleh public.
php artisan storage:link
Dengan command ini, laravel akan create “shortcut” untuk ke storage\app\public
pada folder public supaya dapat diakses oleh public. Anda boleh rujuk dokumentasi lengkap di laman rasmi Laravel
Sekiranya anda ingin memaparkan gambar atau fail yang telah diupload pada fail blade, anda boleh menggunakan code seperti berikut:
{{ asset('storage/'.$dir) }}
Custom Filesystem Disks
Jika anda ingin menggunakan Custom Filesystem Disks, anda boleh ke config\filesystems.php
dan tambah disks media seperti berikut
'disks' => [ 'media' => [ driver' => 'local', root' => public_path('media'), url' => env('APP_URL').'/media', visibility' => 'public', throw' => false, ], ...];
Jika anda ingin menggunakan disks media ini, anda hanya perlu tukar pada code seperti berikut:
$file->storeAs($directory,$filename,'media');
Dengan cara ini, fail anda akan disimpan pada folder public dan cara untuk akses pada fail blade adalah seperti berikut
{{ asset('media/'.$dir) }}
Jika anda mempunyai tips yang menarik, jangan lupa komen dibawah