Я использую CI 2.1.0 и базу данных mysql для одного из моих проектов. Я столкнулся с проблемой с моим методом загрузки изображений. загружаемое мной изображение должно быть сохранено в каталоге загрузок и создать эскизную версию изображения, и путь изображения должен быть сохранен в базе данных. код, который я сделал, работает нормально, но есть одна проблема: при загрузке изображения в каталоге загрузки я получаю две копии одного и того же изображения и в папке с большими папками одну копию загруженного изображения. Я хочу иметь только одну копию изображения вместо этих двух копий. вот мой код->
модель:
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
внутри upload.php
system->libraries
на этот
public $overwrite = TRUE;
Но это не работает. Пожалуйста, помогите.
вы дважды вызываете $ 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; } }
Я дам альтернативный класс загрузчика для правильной загрузки файлов. Вы можете использовать этот код где угодно.
<?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('Ymd 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 } ?>