视图:
<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:\upload\head\\thumb\\test' . $model->image->extensionName, $model->image->extensionName );