我新建的表中的头像的字段名是img,用的是gii生成的后台表的model,curd,默认的img是字符串,下面看如何将这个字符串更改为上传图像。

在试图文件中:(备注下面图片的应该是'htmlOptions'=>array('enctype'=>'multipart/form-data'),图片上是错的)

yii 图片上传以及图片处理扩展_第1张图片

在模型文件中:

yii 图片上传以及图片处理扩展_第2张图片

在控制器文件中:

yii 图片上传以及图片处理扩展_第3张图片

在网站根目录下创建p_w_picpaths/upfile 文件夹,就可以实现上传的功能了。

 /*
 *  $file 是实例化一个CUploadedFile,
 *   然后调用一个saveas()方法,这个方法的参数是要传递过来具体的路径和名称
 *    将具体的路径和名称写入数据库
 */
 //   控制器中
 public function actionUpfile(){
        /*
         * 图片上传
         */
        $model = new Img();
        if(isset($_POST['Img'])){
        //获取一个CUploadfile的实例
        $file = CUploadedFile::getInstance($model,'url');
        //判断实例化是否成功 将图片重命名
        if(is_object($file)&&get_class($file) === 'CUploadedFile'){
            $model->url = './p_w_picpaths/upfile/file'.time().'_'.rand(0,9999).'.'.$file->extensionName;
        }else{
            $model->url='./p_w_picpaths/upfile/no.jpg';
        }
        //将表中的其他的选项保存到数据表中  并将文件开始上传
        if($model->save()){
            if(is_object($file) && get_class($file) === 'CUploadedFile'){
            //调用save方法,将命名和路径以参数形式传递
                $file->saveAs($model->url);
                echo "上传成功";
            }   // 上传图片
            else{
                echo "上传失败";
            }

        }}
        $this->render('upfile',array('model'=>$model));
    }
    
  //视图中
  
    beginWidget('CActiveForm', array(
        'id'=>'img-form',
        'enableAjaxValidation'=>false,
        'htmlOptions'=>array('enctype'=>'multipart/form-data'),
    )); ?>
    

字段带* 的为必填项.

labelEx($model,'url'); ?>          error($model,'url'); ?>
             isNewRecord ? '新增' : '更新'); ?>