Langkah pertama adalah membuat sebuah berkas view dengan nama
upload.php, kemudian simpan berkas tersebut dalam sub direktori
application/views/file. Salin skrip di bawah ini pada berkas view
tersebut, dimana skrip dibawah akan membuat tampilan HTML seperti gambar
diatas.
04 | echo ($success) ? $success : null ?> |
05 | echo ($error) ? $error : null ?> |
06 | echo form_open_multipart(current_url()) ?> |
09 |
echo form_upload('file') ?>
|
11 | echo form_submit('upload', 'Unggah Berkas') ?> |
Perhatikan fungsi form pembuka yang saya
gunakan, disana saya menggunakan fungsi form_open_multipart() dibanding
fungsi form_open(). Fungsi ini akan membuat atribut tambahan berupa
enctype=”multipart/form-data” pada form pembuka yang mengizinkan kita
untuk mengunggah berkas.
Langkah selanjutnya adalah membuat
sebuah controller dengan nama “file”. Dalam controller tersebut terdapat
satu metode dengan nama upload(). Jika aksi unggah dijalankan, maka
akan melakukan proses unggah berkas. Jika tidak ada aksi, maka akan
menampilkan form unggah. Selain itu, controller ini juga akan melakukan
beberapa validasi terhadap berkas yang diunggah, seperti ukuran
maksimal, jenis berkas yang diizinkan atau lainnya. Buat sebuah berkas
dengan nama file.php pada direktori application/controllers, salin skrip
dibawah pada berkas file.php tadi.
01 | defined('BASEPATH') or exit('No direct script access.'); |
09 | final class File extends CI_Controller { |
13 | public function __construct() { |
14 | parent::__construct(); |
17 | $this->directory = 'storage/'.date('Y-m/'); |
18 | if( !is_dir($this->directory) ) { |
19 | mkdir($this->directory, DIR_WRITE_MODE); |
23 | public function upload() { |
24 | $this->load->library(array('upload', 'session')); |
26 | $this->upload->initialize(array( |
27 | 'upload_path' => $this->directory, |
28 | 'allowed_types' => '*', |
30 | 'remove_spaces' => true, |
34 | if( $_POST AND $this->upload->do_upload('file') ) { |
35 | $data = $this->upload->data(); |
38 | $this->session->set_flashdata('success', 'Berkas '.$data['file_name'].' berhasil diunggah.'); |
39 | redirect(current_url()); |
42 | $var->success = $this->session->flashdata('success'); |
43 | $var->error = $this->upload->display_errors(); |
44 | $this->load->view('file/upload', $var); |
Perhatikan pada metode __construct(),
disana terdapat property $directory yang berupa path lengkap lokasi
unggah berkas. Direktori ini mengorganisir berkas yang diunggah berdasar
tahun dan bulan saat ini. Jika direktori tidak tersedia, maka dibuatlah
direktori baru dengan fungsi mkdir(). Argumen kedua pada fungsi
mkdir()
merupakan mode untuk direktori, apa hanya bisa ditulisi atau dibaca
saja. Disana saya melempar argumen berupa konstan yang disediakan oleh
CodeIgniter.
Beralih pada metode initialize() pada
librari/kelas upload. Disana saya melempar argumen berupa array. Isi
dari array tersebut merupakan pengaturan terhadap berkas yang akan kita
unggah. Detailnya tidak akan saya jelaskan satu persatu karena kalian
dapat membacanya pada
dokumentasi librari CodeIgniter.
Selanjutnya metode data() pada librari
upload, yang mengembalikan nilai berupa array. Isi array tersebut
mengandung beberapa informasi sehubungan dengan berkas yang berhasil
kita unggah. Salah satu contoh indeks array yang saya gunakan diatas
adalah file_name, berupa nama baru berkas yang kita unggah.
Terakhir, set_flashdata() pada
librari/kelas session untuk memberitahukan kepada pengguna bahwa berkas
sudah diunggah dan berhasil disimpan di server. Dan, melakukan
pengalihan halaman pada tautan yang sama.
Jika tidak ada aksi POST atau aksi
unggah berkas gagal karena suatu kondisi, maka akan menampilkan form
unggah berkas. Selain itu juga melempar beberapa variabel yang berisi
informasi kesalahan (jika ada) dan menampilkan pesan sukses (jika
berhasil).
Subscribe by Email
Follow Updates Articles from This Blog via Email
No Comments