您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)使用Yii框架怎么實(shí)現(xiàn)一個圖片上傳功能,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
Model:
<?php class Upload extends CActiveRecord { public $image; public static function model($className = __CLASS__) { return $className; } public function tableName() { return '{{resource}}'; } public function rules() { return array( array('image', 'file', 'types'=>'jpg, gif, png') ); } }
注:resource為數(shù)據(jù)表,表前綴可在main.php內(nèi)設(shè)置,相信朋友們在看到文件上傳時應(yīng)該熟悉了main.php位置在哪及運(yùn)作機(jī)制。
Controller:
<?php class UploadController extends Controller { public function actionIndex() { $model=new Upload; if(isset($_POST['Upload'])) { $model->image=CUploadedFile::getInstance($model,'image'); $ext = $model->image->getExtensionName(); $fileName = uniqid() . '.' . $ext; $model->image->saveAs('assets/' . $fileName); } $this->renderPartial('index', array('model'=>$model)); } }
注:saveAs里面是存放圖片上傳后的地址,追蹤下代碼可以發(fā)現(xiàn),該參數(shù)是move_uploaded_file函數(shù)的第二個參數(shù),一定得是文件名。
View:
<meta charset="utf-8"> <?php echo CHtml::form(SITE_URL . 'admin/upload/index','post',array('enctype'=>'multipart/form-data')); ?> <?php echo CHtml::activeFileField($model, 'image'); ?> <?php echo CHtml::submitButton('提交');?> <?php echo CHtml::endForm(); ?>
注:上面的SITE_URL為項(xiàng)目定義的常量,也就是項(xiàng)目的網(wǎng)址
相信經(jīng)過上述步驟,朋友們應(yīng)該可以上傳成功圖片,而且在項(xiàng)目下的assets目錄下找到上傳的圖片。因?yàn)榘l(fā)現(xiàn)yii沒有縮略圖的方法,于是把thinkphp縮略圖的方法整合了進(jìn)來,把下面代碼保存為Image.php放在項(xiàng)目下的protected/extensions目錄下
<?php class Image extends CController { /** +---------------------------------------------------------- * 取得圖像信息 * +---------------------------------------------------------- * @static * @access public +---------------------------------------------------------- * @param string $image 圖像文件名 +---------------------------------------------------------- * @return mixed +---------------------------------------------------------- */ static function getImageInfo($img) { $imageInfo = getimagesize($img); if ($imageInfo !== false) { $imageType = strtolower(substr(image_type_to_extension($imageInfo[2]), 1)); $imageSize = filesize($img); $info = array( "width" => $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); // 計(jì)算縮放比例 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); //創(chuàng)建縮略圖 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);//取消默認(rèn)的混色模式(為解決陰影為綠色的問題) imagesavealpha($thumbImg,true);//設(shè)定保存完整的 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, 0, 0, $trnprt_indx); imagecolortransparent($thumbImg, $trnprt_indx); } } // 復(fù)制圖片 if (function_exists("ImageCopyResampled")) imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight); else imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight); // 對jpeg圖形設(shè)置隔行掃描 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; } } ?>
再在項(xiàng)目下的protected/config/main.php中import字段加上
// autoloading model and component classes 'import'=>array( 'application.models.*', 'application.components.*', 'application.extensions.*', #加上此行,意思為自動載入 ),
再上面的Controller加上
public function actionIndex() { $model=new Upload; if(isset($_POST['Upload'])) { $model->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)); }
關(guān)于使用Yii框架怎么實(shí)現(xiàn)一個圖片上傳功能就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。