Linkedin Instagram Facebook Twitter Mail Youtube Whatsapp

Codeigniter Dosya Yükleme (Uploading Class)

Codeigniter kullanarak panel üzerinden nasıl dosya yükletebiliriz bakalım.Bunun için Codeigniter kendi sitesinde bize döküman olarak sunmuş zaten. Şu adrese bakarsanız eğer kolay bir kullanıma sahip olduğunu da görebilirsiniz. İlk olarak veritabanı ve görünüm sayfası ile işimiz olmayacak bizim. Sadece Controller dosyasında bir metod oluşturacağız ve uploads adında bir klasör açıp resimlerin buraya bu metod sayesinde yükenip yüklenmediğini kontrol edeceğiz.  Controller sayfasında aşağıdaki gibi bir metod oluşturalım. Aşağıdaki kodlar CI kendi dökümantasyonundan alıntıdır. İlk bunu , sonra da kendi örneğimi paylaşacağım.

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.

 

Bir Yorum Yaz