《PHP編程:封裝ThinkPHP的一個文件上傳方法實例》要點:
本文介紹了PHP編程:封裝ThinkPHP的一個文件上傳方法實例,希望對您有用。如果有疑問,可以聯系我們。
PHP實例本文實例講述了封裝ThinkPHP的一個文件上傳辦法,分享給大家供大家參考.具體如下:
PHP實例這陣子,對WBlog的上傳功能作了優化.改進后的上傳功能可以實現縮略圖上傳,圖片上傳,生成水印,文件上傳,并且可以在后臺對上傳的附件進行大小(文件大小),類型(文件類型),水印(針對圖片)的進行設置.此外還可以對上傳的文件進行分類保存到相應的文件夾里,方便管理.
PHP實例下面是對改進后的上傳功能作簡約的說明.
PHP實例縮略圖上傳
PHP實例先前的縮略圖上傳功能使用了KindEditor的上傳組件,除非上傳之前對圖片進行縮略處理,不然上傳的是原圖,改進后的上傳功能可以通過系統對縮略圖的大小進行設置,不管你上傳的原圖有多大,都會生成設置的大小的圖片,并且自動刪除原圖,有效地減少垃圾信息的累積.上傳的縮略圖自動保存到Thumb文件夾
PHP實例圖片上傳
PHP實例上傳圖片,可以根據需要設置圖片的大小、上傳圖片的類型和添加水印.
PHP實例文件上傳
PHP實例如壓縮文件,文檔文件等,可根據需要添加上傳文件類型和大小.
PHP實例添加水印
PHP實例對上傳的圖片添加水印.
PHP實例上面的上傳功能我把它封裝在模型類AttachModel.class.php里,用兩個辦法搞定:
代碼如下:
/**?????
??? * 附件上傳:上傳圖片,縮略圖,文件?????
??? * @param string $model 上傳所在模塊?????
??? * @param bool $type 上傳文件的類型::image(圖片);thumb(縮略圖);file(文件)?????
??? */
????????????
public function upload($model = null, $type = 'image'){?????
?????? //導入上傳類?????
?????? import('ORG.NET.UploadFile');?????
?????? $upload = new UploadFile();?????
?????? $upload->saveRule = 'uniqid'; //設置上傳文件規則?????
?????? $upload->maxSize = C('MAXSIZE')*1024*1024;?? //上傳文件大小?????????
?????? $upload->allowExts = explode(',', C('ALLOWEXTS'));//文件類型?????
???????????????
?????? if ($model){?????
?????????? $upload->savePath = './Public/Uploads/'.$model.'/';?????
?????????? if (!file_exists($upload->savePath)) {?????
???????????? mkdir($upload->savePath);?????
?????????? }?????
?????? }else{?????
?????????? $upload->savePath = './Public/Uploads/Thumb/';?????
?????????? if (!file_exists($upload->savePath)) {?????
???????????? mkdir($upload->savePath);?????
?????????? }?????
?????? }?????
?????? if (in_array($type,array('image','thumb'))){?????
?????????? $upload->thumb = true;?????
?????????? $upload->thumbRemoveOrigin? = true;// //刪除原圖?????
?????????? $upload->thumbPrefix = 'wb_';?????????
?????????? $upload->thumbMaxWidth = $type=='thumb' ? C('THUMB_W') :C('IMAGE_W');//縮略圖寬度?????
?????????? $upload->thumbMaxHeight = $type=='thumb' ? C('THUMB_H') :C('IMAGE_H');//縮略圖高度?????????
???????????????????????????
?????? }?????
?????? if (!$upload->upload()) {?????
?????????? return $upload->getErrorMsg();?????
?????? }else{?????
?????????? $uploadlist = $upload->getUploadFileInfo();?????
?????????? if(C('ISWATER') && $type=='image'){?????
???????????? import('ORG.Util.Image');?????
???????????? //給m_縮略圖添加水印, Image::water('原文件名','水印圖片地址')?????
???????????? foreach ($uploadlist as $key => $value){?????
?????????????? Image::water($value['savepath'] . 'wb_' . $value['savename'], './Public/admin/images/water.png');?????
??????????? }?????
?????????? }?????
?????? }?????
?????? if (in_array($type,array('image','file'))){?????
?????????? return $this->_add($uploadlist,$model);?????
?????? }else{?????
?????????? return $uploadlist[0]['savename'];//返回縮略圖保存名稱?????
?????? }????????????
?? }?????
?? /*?????
??? * 上傳的附件整合成attach所需數據,存入表并返回數組?????
??? * */
?? private function _add($uploadlist,$module=''){?????
?????? //$j = count($uploadlist);?????
?????? $v = array();?????
?????? foreach ($uploadlist as $key => $value){?????
???????????????????
?????????? $v[$key]['name']??????? =?? $value['name'];?????
?????????? $v[$key]['savename']??? =?? $value['savename'];?????
?????????? $v[$key]['savepath']??? =?? substr($value['savepath'], 2);?????
?????????? $v[$key]['size']??????? =?? $value['size'];?????
?????????? $v[$key]['userId']????? =?? $_SESSION[C('USER_AUTH_KEY')];?????
?????????? $v[$key]['uploadTime']? =?? time();?????
?????????? $v[$key]['alt']???????????????? =?? $_POST['alt'][$key];?????
?????????? $v[$key]['module']????????? =?? $_POST['module'];//當前項目路徑??????
?????????? $v[$key]['recordId']??? =?? $_POST['recordId'];//當前項目路徑??????
?????????? $this->add($v[$key]);?????
?????????? if($this->thumb){?????
???????????????????????
?????????????? $v[$key]['prefix']????? =?? $this->thumbPrefix;???????????????????
?????????? }?????
?????????? $v[$key]['id'] = M('Attach')->getLastInsID();?????????????????
?????? }?????
?????? return $v;?????
}
PHP實例希望本文所述對大家的ThinkPHP框架程序設計有所贊助.
歡迎參與《PHP編程:封裝ThinkPHP的一個文件上傳方法實例》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/14366.html