首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >codeigniter 2.1.0中的图片上传问题

codeigniter 2.1.0中的图片上传问题
EN

Stack Overflow用户
提问于 2012-02-07 16:59:06
回答 2查看 1.9K关注 0票数 2

我正在为我的一个项目使用CI 2.1.0和mysql数据库。我的图片上传方法遇到了问题。我上传的图像应该保存在上传目录中,并创建图像的缩略图版本,图像路径应保存在数据库中。我所做的代码运行良好,但有一个问题是,当我上传一个图像时,在upload目录中,我得到了同一图像的两个副本,而在thumbs目录中,我得到了上传图像的一个副本。我只想要一个镜像副本,而不是那两个副本。这是我的代码->

型号:

代码语言:javascript
运行
复制
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;
            }
        }

有些人请告诉我为什么要上传两份图片。还有一件事,我希望图像被覆盖,如果有相同名称的图像存在。我已经将system->libraries中的upload.php文件更改为以下内容

代码语言:javascript
运行
复制
public $overwrite               = TRUE;

但它不起作用。谁来帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-07 17:12:03

您正在调用$this->upload->do_upload()两次。

请尝试此代码

警告:未经测试的

代码语言:javascript
运行
复制
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;
            }
        }
票数 1
EN

Stack Overflow用户

发布于 2012-02-07 17:24:46

我将提供一个替代的uploader类来正确处理文件上传。您可以在任何地方重用此代码。

代码语言:javascript
运行
复制
<?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

代码语言:javascript
运行
复制
<?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
}


?> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9173420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档