程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 封裝ThinkPHP的一個文件上傳方法實例,

封裝ThinkPHP的一個文件上傳方法實例,

編輯:關於PHP編程

封裝ThinkPHP的一個文件上傳方法實例,


本文實例講述了封裝ThinkPHP的一個文件上傳方法,分享給大家供大家參考。具體如下:

這陣子,對WBlog的上傳功能作了優化。改進後的上傳功能可以實現縮略圖上傳,圖片上傳,生成水印,文件上傳,並且可以在後台對上傳的附件進行大小(文件大小),類型(文件類型),水印(針對圖片)的進行設置。此外還可以對上傳的文件進行分類保存到相應的文件夾裡,方便管理。

下面是對改進後的上傳功能作簡約的說明。

縮略圖上傳

先前的縮略圖上傳功能使用了KindEditor的上傳組件,除非上傳之前對圖片進行縮略處理,不然上傳的是原圖,改進後的上傳功能可以通過系統對縮略圖的大小進行設置,不管你上傳的原圖有多大,都會生成設置的大小的圖片,並且自動刪除原圖,有效地減少垃圾信息的累積。上傳的縮略圖自動保存到Thumb文件夾

圖片上傳

上傳圖片,可以根據需要設置圖片的大小、上傳圖片的類型和添加水印。

文件上傳

如壓縮文件,文檔文件等,可根據需要添加上傳文件類型和大小。

添加水印

對上傳的圖片添加水印。

上面的上傳功能我把它封裝在模型類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;     
}

希望本文所述對大家的ThinkPHP框架程序設計有所幫助。




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved