public function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 100;
$config['max_width'] = 1024;
$config['max_height'] = 768;
//Dosya yüklemek için en temel ayarlar.
//Dizin , format , boyut,genişlik,yükseklik gibi ayarlar.
$this->load->library('upload', $config);
//upload sınıfını dahil ediyoruz.
if ( ! $this->upload->do_upload('userfile'))
//formda resim alanına vermiş olduğumuz name değeri ile yüklenip yüklenmediğini
//kontrol ediyoruz. Eğer yüklenmemişse hata mesajı bastırıyoruz.
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
}
}
İşlemler oldukça basit ve sade. Sadece kendimize göre uyarlamamız gerekiyor. Config dosyasındaki diğer ayarları yine dökümantasyondan bulabilirsiniz.
Not: Dosyanın yükleneceği dizini iyi seçmelisiniz. Uygulamanın ana dizinine açıyorsanız ‘ uploads ‘ diye belirtebilirsiniz. Alt dizinlerde ise buna dikkat ederek belirtin.
Aşağıda benim örneğimi görebilirsiniz. Burada bütün işlemler var, form kontrolü , veri gönderimi , session kontrolü , dosya yükleme gibi birçok işlem var. Yukarıdaki örnekten farklı bir ayar görmeyeceksiniz zaten.
public function AddArticle(){
if(empty($this->session->username)){
redirect(base_url());
}
$this->load->model('Control');
$query = $this->Control->SelectCategory();
$data['cat_list'] = $query;
$this->load->view('Panel/AddArticle_view.php',$data);
if($_POST){
$config['upload_path'] = 'uploads';
$config['allowed_types'] = 'jpeg|jpg|png';
$config['max_size'] = '4096';
$config['min_width'] = '300';
$config['min_height'] = '200';
$config['remove_spaces'] =true;
$this->load->library('upload', $config);
if ($this->upload->do_upload("resim")){
$upload_data = $this->upload->data();
$dosyaadi = $upload_data['file_name'];
$dosyayolu ="uploads/".$dosyaadi;
$this->form_validation->set_rules('baslik','Başlık','required');
$this->form_validation->set_rules('aciklama','Açıklama','required');
if($this->form_validation->run() == TRUE){
$baslik = $this->input->post('baslik');
$seo_baslik = seo($this->input->post('baslik'));
$aciklama = $this->input->post('aciklama');
$kategori = $this->input->post('kategori');
$yazan = $this->session->username;
$tarih = date('d.m.y H:i:s');
$gtarih = date('d.m.y H:i:s');
$result = $this->Control->AddArticle($baslik,$seo_baslik,$aciklama,$kategori,$yazan,$tarih,$gtarih,$dosyayolu);
if($result == 1){
redirect(base_url('Admin/AddArticle'));
}else{
echo 'Bir hata var';
}
}else{
echo '<div class="alert alert-danger">Form alanlarını kontrol et!</div>';
}
}else{
echo '<div class="alert alert-danger">
<center>Hata, bir sorun var!.'.$this->upload->display_errors().'</center></div>';
}
}
}
Açıklama
$config[‘upload_path’] = ‘uploads’; => Dosyanın yükleneceği dizin
$config[‘allowed_types’] = ‘jpeg|jpg|png’; => Kabul edilen dosya formatları
$config[‘max_size’] = ‘4096’; => Maksimum dosya boyutu
$config[‘min_width’] = ‘300’; => Minimum genişlik
$config[‘min_height’] = ‘200’; => Minimum yükseklik
$config[‘remove_spaces’] =true; => Resim ismindeki boşlukları temizler.
$this->upload->display_errors(); => Olası bir hatada ekrana hata mesajını basar.
Alternatif bir yöntem
$this->load->library(‘upload’, $config); ifadesini kullanmak istemezseniz farklı bir yöntem de sunuluyor. Bize alternatif sağlayan anahtar kelime ise initialize. Bu yöntem sayesinde dahil etme farklı bir boyut alıyor ve kodda ufak bir oynama oluyor.
$this->load->library('upload', $config);
yerine
$this->upload->initialize($config);şeklinde kullanabiliyoruz.Ancak dökümantasyonda ilk yöntem uygun görülmüş ve tavsiye ediliyor.