微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Yii框架实现图片上传的方法详解

本文实例讲述了Yii框架实现图片上传方法分享给大家供大家参考,具体如下:

今天在网上看了下有关图片上传的教程,历经挫折才调试好,现在把相关代码及其说明贴出来,以供初次使用的朋友们参考。

Model:

rush:PHP;"> 'jpg,gif,png') ); } }

注:resource为数据表,表前缀可在main.PHP内设置,相信朋友们在看到文件上传时应该熟悉了main.PHP位置在哪及运作机制。

Controller:

rush:PHP;"> image=CUploadedFile::getInstance($model,'image'); $ext = $model->image->getExtensionName(); $fileName = uniqid() . '.' . $ext; $model->image->saveAs('assets/' . $fileName); } $this->renderPartial('index',array('model'=>$model)); } }

注:saveAs里面是存放图片上传后的地址,追踪下代码可以发现,该参数是move_uploaded_file函数的第二个参数,一定得是文件名。

View:

rush:PHP;"> <Meta charset="utf-8"> 'multipart/form-data')); ?>

注:上面的SITE_URL为项目定义的常量,也就是项目的网址

相信经过上述步骤,朋友们应该可以上传成功图片,而且在项目下的assets目录下找到上传图片。因为发现yii没有缩略图方法,于是把thinkPHP缩略图方法整合了进来,把下面代码保存为Image.PHP放在项目下的protected/extensions目录下

rush:PHP;"> $imageInfo[0],"height" => $imageInfo[1],"type" => $imageType,"size" => $imageSize,"mime" => $imageInfo['mime'] ); return $info; } else { return false; } } /** +---------------------------------------------------------- * 生成缩略图 +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $image 原图 * @param string $type 图像格式 * @param string $thumbname 缩略图文件名 * @param string $maxWidth 宽度 * @param string $maxHeight 高度 * @param string $position 缩略图保存目录 * @param boolean $interlace 启用隔行扫描 +---------------------------------------------------------- * @return void +---------------------------------------------------------- */ static function thumb($image,$thumbname,$type='',$maxWidth=200,$maxHeight=50,$interlace=true) { // 获取原图信息 $info = Image::getimageInfo($image); if ($info !== false) { $srcWidth = $info['width']; $srcHeight = $info['height']; $type = empty($type) ? $info['type'] : $type; $type = strtolower($type); $interlace = $interlace ? 1 : 0; unset($info); $scale = min($maxWidth / $srcWidth,$maxHeight / $srcHeight); // 计算缩放比例 if ($scale >= 1) { // 超过原图大小不再缩略 $width = $srcWidth; $height = $srcHeight; } else { // 缩略图尺寸 $width = (int) ($srcWidth * $scale); $height = (int) ($srcHeight * $scale); } // 载入原图 $createFun = 'ImageCreateFrom' . ($type == 'jpg' ? 'jpeg' : $type); if(!function_exists($createFun)) { return false; } $srcImg = $createFun($image); //创建缩略图 if ($type != 'gif' && function_exists('imagecreatetruecolor')) $thumbImg = imagecreatetruecolor($width,$height); else $thumbImg = imagecreate($width,$height); //png和gif的透明处理 by luofei614 if('png'==$type){ imagealphablending($thumbImg,false);//取消认的混色模式(为解决阴影为绿色的问题) imagesavealpha($thumbImg,true);//设定保存完整的 alpha 通道信息(为解决阴影为绿色的问题) }elseif('gif'==$type){ $trnprt_indx = imagecolortransparent($srcImg); if ($trnprt_indx >= 0) { //its transparent $trnprt_color = imagecolorsforindex($srcImg,$trnprt_indx); $trnprt_indx = imagecolorallocate($thumbImg,$trnprt_color['red'],$trnprt_color['green'],$trnprt_color['blue']); imagefill($thumbImg,$trnprt_indx); imagecolortransparent($thumbImg,$trnprt_indx); } } // 复制图片 if (function_exists("ImagecopyResampled")) imagecopyresampled($thumbImg,$srcImg,$width,$height,$srcWidth,$srcHeight); else imagecopyresized($thumbImg,$srcHeight); // 对jpeg图形设置隔行扫描 if ('jpg' == $type || 'jpeg' == $type) imageinterlace($thumbImg,$interlace); // 生成图片 $imageFun = 'image' . ($type == 'jpg' ? 'jpeg' : $type); $imageFun($thumbImg,$thumbname); imagedestroy($thumbImg); imagedestroy($srcImg); return $thumbname; } return false; } } ?>

再在项目下的protected/config/main.PHP中import字段加上

array( 'application.models.*','application.components.*','application.extensions.*',#加上此行,意思为自动载入 ),

再上面的Controller加上

image=CUploadedFile::getInstance($model,'image'); $ext = $model->image->getExtensionName(); $fileName = uniqid() . '.' . $ext; $model->image->saveAs('assets/' . $fileName); // 生成缩略图 Image::thumb('assets/' . $fileName,'assets/' . uniqid() . '.' . $ext); } $this->renderPartial('index',array('model'=>$model)); }

这次就完整了。

更多关于Yii相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《PHP常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

原文地址:https://www.jb51.cc/php/17433.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐