2012-02-07 3 views
2

Я использую CI 2.1.0 и базу данных mysql для одного из моих проектов. Я столкнулся с проблемой с моим методом загрузки изображений. загружаемое мной изображение должно быть сохранено в каталоге загрузок и создать эскизную версию изображения, и путь изображения должен быть сохранен в базе данных. код, который я сделал, работает нормально, но есть одна проблема: при загрузке изображения в каталоге загрузки я получаю две копии одного и того же изображения, а в папке с большими пальцами - одну копию загруженного изображения. Я хочу иметь только одну копию изображения вместо этих двух копий. вот мой код->
проблема с загрузкой изображений в codeigniter 2.1.0

модель:

function do_upload() //to upload images in upload directory 
     { 
      $i=$this->db->get('portfolio')->num_rows(); 
      $i=$i+1; 
      $image_path=realpath(APPPATH . '../uploads'); 
      $config=array(
       'allowed_types'=>'jpeg|png|gif|jpg', 
       'upload_path'=>$image_path, 
       'max_size'=>2097152, 
       'file_name'=>'_'.$i.'_' 
      ); 
      $this->load->library('upload', $config); 
      $this->upload->do_upload(); 
      $image_data = $this->upload->data(); 
      $config=array(
       'source_image'=>$image_data['full_path'], 
       'new_image'=>$image_path.'/thumbs', 
       'maintain_ration'=>TRUE, 
       'width'=>150, 
       'height'=>100 
      ); 
      $this->load->library('image_lib', $config); 
      $this->image_lib->resize(); 
      if(! $this->upload->do_upload()) 
      { 
       $error = array('error' => $this->upload->display_errors()); 
       return $error; 
      } 
      else 
      { 
       return $image_data; 
      } 
     } 


некоторые скажите, пожалуйста, почему две копии изображений загружаются. есть вещь, я хочу, чтобы изображения были перезаписаны, если изображение с таким же именем существует. я изменил файл upload.php внутри system->libraries к этому

public $overwrite    = TRUE; 

, но он не работает. Пожалуйста, помогите.

ответ

1

вы вызываете $ this-> upload-> do_upload() дважды ..

Пожалуйста, попробуйте этот код

Предупреждение: Непроверенные

function do_upload() 

     { 
      $i=$this->db->get('portfolio')->num_rows(); 
      $i=$i+1; 

      $image_path=realpath(APPPATH . '../uploads'); 

      $config=array(
       'allowed_types'=>'jpeg|png|gif|jpg', 
       'upload_path'=>$image_path, 
       'max_size'=>2097152, 
       'overwrite'=>TRUE, 
       'file_name'=>'_'.$i.'_' 
      ); 


      $this->load->library('upload', $config); 


     if(! $this->upload->do_upload()) 
      { 
       $error = array('error' => $this->upload->display_errors()); 
       return $error; 
      } 
      else 
      { 

     $image_data = $this->upload->data(); 
      $config=array(
       'source_image'=>$image_data['full_path'], 
       'new_image'=>$image_path.'/thumbs', 
       'maintain_ration'=>TRUE, 
       'width'=>150, 
       'height'=>100 
      ); 
      $this->load->library('image_lib', $config); 
      $this->image_lib->resize(); 
       return $image_data; 
      } 
     } 
+0

спасибо :) @krish – Shabib

1

дам альтернативный загрузчик класс для правильной загрузки файлов. Вы можете использовать этот код где угодно.

<?php 

//Save file as Uploader.php 
//File Uploading Class 

class Uploader 
{ 
private $destinationPath; 
private $errorMessage; 
private $extensions; 
private $allowAll; 
private $maxSize; 
private $uploadName; 
private $seqnence; 
public $name='Uploader'; 
public $useTable =false; 

function setDir($path){ 
$this->destinationPath = $path; 
$this->allowAll = false; 
} 

function allowAllFormats(){ 
$this->allowAll = true; 
} 

function setMaxSize($sizeMB){ 
$this->maxSize = $sizeMB * (1024*1024); 
} 

function setExtensions($options){ 
$this->extensions = $options; 
} 

function setSameFileName(){ 
$this->sameFileName = true; 
$this->sameName = true; 
} 
function getExtension($string){ 
$ext = ""; 
try{ 
$parts = explode(".",$string); 
$ext = strtolower($parts[count($parts)-1]); 
}catch(Exception $c){ 
$ext = ""; 
} 
return $ext; 
} 

function setMessage($message){ 
$this->errorMessage = $message; 
} 

function getMessage(){ 
return $this->errorMessage; 
} 

function getUploadName(){ 
return $this->uploadName; 
} 
function setSequence($seq){ 
$this->imageSeq = $seq; 
} 

function getRandom(){ 
return strtotime(date('Y-m-d H:iConfused')).rand(1111,9999).rand(11,99).rand(111,999); 
} 
function sameName($true){ 
$this->sameName = $true; 
} 
function uploadFile($fileBrowse){ 
$result = false; 
$size = $_FILES[$fileBrowse]["size"]; 
$name = $_FILES[$fileBrowse]["name"]; 
$ext = $this->getExtension($name); 
if(!is_dir($this->destinationPath)){ 
$this->setMessage("Destination folder is not a directory "); 
}else if(!is_writable($this->destinationPath)){ 
$this->setMessage("Destination is not writable !"); 
}else if(empty($name)){ 
$this->setMessage("File not selected "); 
}else if($size>$this->maxSize){ 
$this->setMessage("Too large file !"); 
}else if($this->allowAll || (!$this->allowAll && in_array($ext,$this->extensions))){ 

if($this->sameName==false){ 
$this->uploadName = $this->imageSeq."-".substr(md5(rand(1111,9999)),0,8).$this->getRandom().rand(1111,1000).rand(99,9999).".".$ext; 
}else{ 
$this->uploadName= $name; 
} 
if(move_uploaded_file($_FILES[$fileBrowse]["tmp_name"],$this->destinationPath.$this->uploadName)){ 
$result = true; 
}else{ 
$this->setMessage("Upload failed , try later !"); 
} 
}else{ 
$this->setMessage("Invalid file format !"); 
} 
return $result; 
} 

function deleteUploaded(){ 
unlink($this->destinationPath.$this->uploadName); 
} 

} 

?> 

Использование Uploader.php

<?php 

$uploader = new Uploader(); 
$uploader->setDir('uploads/images/'); 
$uploader->setExtensions(array('jpg','jpeg','png','gif')); //allowed extensions list// 
$uploader->setMaxSize(.5); //set max file size to be allowed in MB// 

if($uploader->uploadFile('txtFile')){ //txtFile is the filebrowse element name // 
$image = $uploader->getUploadName(); //get uploaded file name, renames on upload// 

}else{//upload failed 
$uploader->getMessage(); //get upload error message 
} 


?> 
Смежные вопросы