What Is The Best Way To Upload An Image To A Website? Database Or Filesystem?
Laravel File Upload (Belajar Laravel #xv)
Laravel File Upload merupakan salah satu bagian dari fungsi form yang dipergunakan untuk mengunggah atau mengupload file pada server. Penggunaan fitur ini misalnya pada halaman profil, maka pengguna dapat mengisikan form untuk berbagai data profil termasuk mengupload foto yang akan difungsikan sebagai foto profil. Untuk keperluan Laravel File Upload ini disediakan abstraksi sistem file melalui modul PHP Flysystem yang menyediakan driver yang dapat dipergunakan untuk bekerja dengan filesystem lokal, Amazon S3, dan Rackspace Cloud Storage.
Membuat Laravel File Upload
Berikut adalah beberapa hal yang perlu diperhatikan untuk mengimplementasikan Laravel File Upload, yaitu terkait dengan File System, Multipart Course Data, Symlink, dan Enctype.
File Organisation
- Konfigurasi terdapat pada config/filesystems.php
- Public Disk
- Publik Disk merupakan tempat penyimpanan yang ditujukan untuk meletakkan file yang akan dapat diakses publik.
- Secara default, disk publik adalah penyimpanan lokal pada folder storage/app/public.
- Agar folder tersebut dapat diakses dari web, maka perlu dibuat symbolic link dari public/storage ke storage/app/public.
- Dengan symbolic link kedua binder akan berisi file yang sama, namun file tidak dicopykan
- Pembuatan Symbolic Links melalui perintah Artisan:
$ php artisan storage:link
- Setelah symbolic link dibuat, maka file akan dapat diakses public dengan menggunakan role asset untuk menghasilkan link yang sesuai
- Berikut contoh untuk menampilkan isi file.txt yang terletak di folder public/storage
repeat asset('storage/file.txt'); - The Local Driver
- Pada saat menggunakan commuter lokal, semua operasi file adalah relatif terhadap folder root yang ditentukan dalam file konfigurasi, dimana defaultnya adalah: storage/app
- Berikut contoh potongan program untuk menyimpan file di storage/app/file.txt:
Storage::disk('local')->put('file.txt', 'Contents'); - Penggunaan Storage harus diawali dengan perintah:
use Illuminate\Support\Facades\Storage;
- Mengambil atau Membaca File
- Untuk memgambil file dapat dipergunakan method get. Jangan lupa bahwa file akan diambil pada folder root storage sesuai konfigurasi
$contents = Storage::become('file.jpg'); - Untuk memastikan bahwa file yang akan diambil tersedia, dapat dipergunakan method exist
$exists = Storage::disk('local')->exists('file.jpg');
- Untuk memgambil file dapat dipergunakan method get. Jangan lupa bahwa file akan diambil pada folder root storage sesuai konfigurasi
- Mendownload File
- Method download dapat dipergunakan untuk memberikan respon untuk meminta browser mendownload sebuah file.
- File name yang terdapat di parameter kedua merupakan nama file yang akan dilihat user pada saat mendownload file.
- Parameter ketiga merupakan HTTP headers
return Storage::download('file.jpg');
render Storage::download('file.jpg', $name, $headers);
- Untuk menghasilkan sebuah URL menuju file dimaksud, dapat digunakan method url pada Storage
$url = Storage::url('file.jpg'); - Berikut adalah fungsi untuk menyalin dan memindahkan sebuah file ke file lain
Storage::copy('old/file.jpg', 'new/file.jpg');
Storage::move('old/file.jpg', 'new/file.jpg');
File Uploads
- Berikut adalah Langkah Pembuatan File Uploads
- Membuat symlink
- Pada controller yang memanfaatkan class Storage:
use Illuminate\Support\Facades\Storage; - Buat form dengan enctype 'multipart/form-data'
- Buat elemen form File Upload
- Validasi file
- Simpan file di server
Tutorial Laravel File Upload
Tutorial berikut adalah menambahkan file upload gambar pada weblog mail.
Membuat symlink
- Buat symlink terlebih dahulu, supaya file nantinya dapat diakses public
- Semua file yang ada di storage/app/public akan dapat diakses pada public/storage
Menambahkan Enctype
- Silahkan menambahkan enctype di Form::open
Tambahkan Tombol File Upload
- Buka file create.blade.php
- Tambahkan perintah Form untuk menampilkan tombol File Upload
Menambahkan Tabel untuk menyimpan nama file
- Untuk menyimpan nama file maka perlu ditambahkan sebuah field column di tabel posts, untuk itu dibuat sebuah migration
- Tambahkan column foto
- Setelah menjalankan migrations cheque database via phpMyAdmin
Mengubah PostsController
Ada beberapa hal yang perlu ditambahkan di Posts Controller untuk memvalidasi dan menyimpan file di dalam database maupun di local storage
Validasi Prototype
- Pada contoh ini file upload dipergunakan untuk menyimpan paradigm, maka perlu dilakukan validasi untuk memastikan file yang diupload adalah epitome (parameter pertama)
- nullable di parameter kedua artinya opsional, boleh tidak ada
- max untuk membatasi ukuran file yang diupload (bytes)
Memeriksa File Upload
Untuk memeriksa apakah user mengupload file dengan memanfaatkan form, dapat diperiksa dengan method hasfile
Nama File Unik
- Program harus memastikan bahwa nama file unik, ada kemungkinan user akan mengupload foto dengan nama yang sama, misalnya foto.jpg, ada kemungkinan akan dipergunakan berulang kali.
- Pada contoh berikut akan dilakukan pengambilan nama file tanpa extension, kemudian pengambilan extension.
- Nama file yang disimpan di database termasuk penyimpanan di local storage akan menggunakan format namaFileTanpaExt_waktuUpload.extension
- Dengan menggunakan method storeAs bisa ditetapkan lokasi penyimpanan dan juga nama file yang diinginkan
- Program sebelumnya hanya menyimpan file di server, belum termasuk penyimpanan information. Tambahkan di controller.
- Silahkan dicoba untuk menjalankan program
Written by: Sew together 20191115
Share This Story, Choose Your Platform!
1 Annotate
Source: https://informatika.uc.ac.id/id/2019/11/laravel-file-upload/
Posted by: delossantosherach.blogspot.com
[…] File Upload (#15) […]