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.

 

AuthorHarun ALP

Bu adam , bilgi sahibi olduğu konularda makalelerini daha bilgilendirici hale getirip görseller ile süslüyor ve seo uyumlu makaleler ortaya çıkarıyor. Güncel webmaster konularını işlemekten keyif alıyor ve genelde her makale aslında bir sorunun çözümü niteliğinde.

One thought on “Codeigniter Dosya Yükleme (Uploading Class)

  1. Bilgiler için teşekkürler. İyi çalışmalar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir