Yii上传文件(头像)详解(一)

yii框架提供了activeFileField控件来完成上传文件(当然也包括了上传图片)的操作


1、函数原型:
public static string activeFileField(CModel $model, string $attribute, array $htmlOptions=array ());

2、调用例子:

(1)首先,设置form,这一步一 定要做,把form设置为’multipart/form-data’,具体请看我的:

    <?php $form=$this->beginWidget('CActiveForm', array(  
        'id'=>'user-form',  
        'enableAjaxValidation'=>false,  
        'htmlOptions'=>array('enctype'=>'multipart/form-data'),  
    )); ?>  

注:id的作用。
(2) 接着,在view下的form里设置:

    <div class="row">  
        <?php echo $form->labelEx($model,'avatar'); ?>  
        <?php echo CHtml::activeFileField($model,'avatar'); ?>  
        <?php echo $form->error($model,'avatar'); ?>  
    </div>  

最后,加上提交按钮。

    <div class="row buttons">  
            <?php echo CHtml::submitButton($model->isNewRecord ? '立即创建' : '保存修改'); ?>  
    </div>  
      
    <?php $this->endWidget(); ?>  

(3) 如果你想预览图片,那么请注意了,可以加上这么一段:

    <div class="row">  
            <?php echo '图片预览'; ?>  
            <?php echo '<img src="http://localhost/../'.$model->avatar.'" style="width:200px; height:300px;" />'; ?>  
        </div>  

(4)最后,需要在控制类里加上下面的:

    $image = CUploadedFile::getInstance($model, 'avatar');  
    if( is_object($image) && get_class($image) === 'CUploadedFile' ){  
        $model->avatar = '自己设置的文件名'.'.jpg';  
    }else{  
        $model->avatar = 'NoPic.jpg';  
    }  
    if( $model->save() ){  
        if(is_object($image) && get_class($image) === 'CUploadedFile'){  
            $image->saveAs(Yii::app()->basePath.'/../uploads/'.$model->avatar);  
        }  
        $this->redirect(array('view','id'=>$model->userId));  
    }  

注:问了方便文件管理,建议这样使用  $image->saveAs(‘./assets/upload/’.$imageName) ,保证assets目录下存在upload目录


版本二:

    public function beforeSave()  
        {  
            if($file=CUploadedFile::getInstance($this,'uploadedFile'))  
            {  
                $this->file_name=$file->name;  
                $this->file_type=$file->type;  
                $this->file_size=$file->size;  
                $this->file_content=file_get_contents($file->tempName);  
            }  
            return parent::beforeSave();  
        }  

(5)限制上传的文件必须是图片,还有限制图片大小,那么请到model层里的rules新增这么一句:

    array('avatar',   
        'file',   
        'allowEmpty'=>true,  
        'types'=>'jpg,gif,png',  
        'maxSize'=>1024 * 1024 * 1,  
        'tooLarge'=>'头像最大不超过1MB,请重新上传!',  
    ),  

(6) 显示图片时,在view目录中,使用CHtm::image()函数
CHtml::image($model->product_imgage,//保存图片的名称,只要文件名正确 ,yii默认帮你查找图片
‘产品图片’, alt属性,放在页面显示的该名称
array(‘width’=>250,’height’=>120));  设置图片大小

注:参考  http://www.9ihl.com/archives/312


(二)展示及下载
1,展示

    <? echo CHtml::link(my_link_name,array('displaySavedImage','id'=>$model->primaryKey)); ?>  

2,下载

    public function actionDisplaySavedImage()  
    {  
        $model=$this->loadModel($_GET['id']);  
       
        header('Pragma: public');  
        header('Expires: 0');  
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');  
        header('Content-Transfer-Encoding: binary');  
        header('Content-length: '.$model->file_size);  
        header('Content-Type: '.$model->file_type);  
        header('Content-Disposition: attachment; filename='.$model->file_name);  
       
            echo $model->file_content;  
    }  

参考:http://www.yiiframework.com/wiki/95/saving-files-to-a-blob-field-in-the-database/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值