zoukankan      html  css  js  c++  java
  • Yii的上传类使用CUploadedFile

    视图:

    <div class="row">
    		<?php echo $form->labelEx($model,'imagefile'); ?>
    		<?php echo $form->fileField($model,'imagefile',array('size'=>50)); 
    			  if(!empty($model->imgurl))
    			  	echo "<img src='".BASEURL."/resources/icons/picture.png' title='缩略图'/>";
    		?>
    	</div>
    

    create控制器:

    $model->attributes=$_POST['Article'];
    $upload=CUploadedFile::getInstance($model,'imagefile');  //得到原照片这个对象
    if(!empty($upload))
    {
    $model->imgurl=Upload::createFile($upload,'article','create');  imgurl数据库字段表示图片存储路径
    }
    

    上传类:放在extension里面

    <?php
    /**
     * $upload: CUploadedFile::getInstance;
     * $type:  artilce product
     * $act:  create update
     * $imgurl:  delete old imgurl when update
     */
    class Upload{
    
    	public static function createFile($upload,$type,$act,$imgurl=''){
    		if(!empty($imgurl)&&$act==='update'){
    			$deleteFile=Yii::app()->basePath.'/../'.$imgurl;
    			if(is_file($deleteFile))
    				unlink($deleteFile);      //修改图片的时候删除原片
    		}
    		$uploadDir=Yii::app()->basePath.'/../uploads/'.$type.'/'.date('Y-m',time());   //指定路径名格式
    		self::recursionMkDir($uploadDir);            //创建目录
    		$imgname=time().'-'.rand().'.'.$upload->extensionName;  
    		
    		
    		
    		//图片存储路径
    		$imageurl='/uploads/'.$type.'/'.date('Y-m',time()).'/'.$imgname;
    		
    		
    		//存储绝对路径
    		$uploadPath=$uploadDir.'/'.$imgname;
    		
    		if($upload->saveAs($uploadPath)){
    			return $imageurl;
    		}else{
    			return null;
    		}
    	}
    	private static function recursionMkDir($dir){
    		if(!is_dir($dir)){                                  //is_dir() 函数检查指定的文件是否是目录。
    			if(!is_dir(dirname($dir))){
    				self::recursionMkDir(dirname($dir));            //dirname() 函数返回路径中的目录部分。
    				mkdir($dir,'0777');                            //mkdir()
    			}else{
    				mkdir($dir,'0777');                            //mkdir() 函数创建目录。若成功,则返回 true,否则返回 false。
    			}
    		}
    	}
    }
    

    扩展:

    与前面(http://zccst.iteye.com/blog/1114948)的区别是不再依赖model。 
    也不再依赖yii自带的前端表单控件activeFileField。 
    感觉这样轻量级多了。 
    
    简言之: 
    1,form要带enctype="multipart/form-data" 
    2,文件控件只需写name即可。<input type="file" name="fileName" /> 
    3,直接在php端使用$attach = CUploadedFile::getInstanceByName("fileName");即可。 
    不需要先用$fileName = $this->request->getParam('fileName'); 
    注可以在前端写多个相同name的文件控件,这样在后端用$attaches = CUploadedFile::getInstancesByName("fileName");即可 
    
    一、前端代码 
    Html代码  收藏代码
    <form id="upForm" action="<?php echo $this->createUrl('repairUpload'); ?>" method="post" enctype    ="multipart/form-data">  
        <input type="file" name="repair_attached_file" id="repair_attached_file" /><input type="submit" name="submitBtn" value="立即上传" />  
    </form>  
    <span id="upload_repairinfo_success" style="color:blue;"></span>  
    
    
    
    二、后端代码 
    Php代码  收藏代码
    public function actionRepairUpload(){  
        $attach = CUploadedFile::getInstanceByName('repair_attached_file');  
        $retValue = "";  
        if($attach->size > 3*1024*1024){  
            $retValue = "提示:文件大小不能超过3M";  
        }else{  
            $f = file_get_contents($attach->tempName);  
            $a = new Attachment();  
            $a->ref_type = "failParts";  
            $a->data = $f;  
            $a->file_path = $attach->name;  
            $a->save();  
            $retValue = $a->id;  
        }  
        echo $retValue;  
    }  
    

      

    Yii生成缩略图生成函数cthumb
    admin | 2012-07-01
    
    需求
    
    Yii 1.0以上版本
    
    要求GD库
    
    下载本站附件
    
    安装
    
    解压文件至protected/extensions
    
    extension=php_gd2.dll
    
    使用
    
    看下面的例子:
    ...             
    $im = null;
    $imagetype = strtolower($model->image->extensionName)
    if($imagetype == 'gif')
        $im = imagecreatefromgif($path);
    else if ($imagetype == 'jpg')
        $im = imagecreatefromjpeg($path);
    else if ($imagetype == 'png')
        $im = imagecreatefrompng($path);
    CThumb::resizeImage ( 
    $im,100, 100,
    'd:uploadhead\thumb\test' . $model->image->extensionName, $model->image->extensionName );
    

      

  • 相关阅读:
    FT View SE联合Studio 5000仿真
    安装AB编程软件提示安装失败时如何处理
    如何识别Studio 5000程序开发版本号
    Studio 5000编程:一种累计时间的编程方法
    CPU或以太网模块重启DHCP请求
    Studio 5000编程:如何判断AB PLC系统中的硬件设备是否在正常工作
    使用以太网通信方式刷新AB PLC固件
    初探Node-red结合阿里云数据库,定时显示数据
    SQL SERVER 按时间计算每天某值的平均值
    微信小程序对接显示阿里云数据库数据
  • 原文地址:https://www.cnblogs.com/fengzhiqiangcaisangzi/p/3381685.html
Copyright © 2011-2022 走看看