圖片上傳在網站裡是很常用的功能.ThinkPHP裡也有自帶的圖片上傳類(UploadFile.class.php) 和圖片模型類(Image.class.php)。方便於我們去實現圖片上傳功能,下面是實現方法
1.我們首先需要創建一個表 代碼如下: CREATE TABLE IF NOT EXISTS `tp_image` ( `id` int(11) NOT NULL AUTO_INCREMENT, `image` varchar(200) NOT NULL, `create_time` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 2.然後再conf文件裡添加配置(最後一段配置是可選的,只是為了方便統一管理URL路徑) 代碼如下: <?php return array( 'URL_MODEL' => 2, // 如果你的環境不支持PATHINFO 請設置為3 'DB_TYPE' => 'mysql', 'DB_HOST' => 'localhost', 'DB_NAME' => 'thinkphp', 'DB_USER' => 'root', 'DB_PWD' => '', 'DB_PORT' => '3306', 'DB_PREFIX' => 'tp_', 'SHOW_PAGE_TRACE' =>true, //顯示頁面調試明細 'TMPL_PARSE_STRING' => array( // 地址替換,用_UPLOAD_目錄 代替 根目錄下的Upload目錄 '__UPLOAD__' => __ROOT__.'/Uploads', ), ); ?> 3.添加一個Image模塊(名字可以隨便取) 代碼如下: <?php class ImageAction extends Action{ /** * 創建index 入口方法 */ public function index(){ $image=M('Image'); $data=$image->order('create_time desc')->find(); //獲取最後上傳圖片 $this->assign('data',$data); $this->display(); } ?> 4.創建相應index視圖文件(index.html) 代碼如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style type="text/css"> #img{height:22px; border:#000 2px solid} #button{height:30px; width:100px;} </style> </head> <body> <div class="result" >上傳允許文件類型:gif png jpg 圖像文件,並生成2張縮略圖,其中大圖帶水印,生成後會刪除原圖。</div><br> <notempty name="data"><img src="__UPLOAD__/m_{$data.image}" /> <img src="__UPLOAD__/s_{$data.image}" /></notempty> <form action="__URL__/upload" method="post" enctype="multipart/form-data"> <input type="file" name="image" id="img"/> <input type="submit" value="上傳" id="button"> </form> </body> </html> 5.選擇圖片,點擊上傳按鈕後,會跳到Image模塊的upload方法上,Image模塊上現在還沒有這個方法,於是我們創建它 代碼如下: <?php class ImageAction extends Action{ /** * 創建index 入口方法 */ public function index(){ $image=M('Image'); $data=$image->order('create_time desc')->find(); //獲取最後上傳圖片 var_dump($data); $this->assign('data',$data); $this->display(); } //如果上傳的文件不為空,跳轉到_upload方法 public function upload(){ //如果不為空 if(!empty($_FILES)) { $this->_upload(); } } 6.如果提交的不是NULL,則跳到_upload方法上,此方法實現圖片上傳的功能 代碼如下: <?php class ImageAction extends Action{ /** * 創建index 入口方法 */ public function index(){ $image=M('Image'); $data=$image->order('create_time desc')->find(); //獲取最後上傳圖片 var_dump($data); $this->assign('data',$data); $this->display(); } //如果上傳的文件不為空,跳轉到_upload方法 public function upload(){ //如果不為空 if(!empty($_FILES)) { $this->_upload(); } } /*** * 實現圖片上傳 */ public function _upload(){ import('@.ORG.UploadFile'); //導入上傳類 $upload = new UploadFile(); //設置上傳文件大小 $upload->maxSize = 3292200; //設置上傳文件類型 $upload->allowExts = explode(',', 'jpg,gif,png,jpeg'); //設置附件上傳目錄 $upload->savePath = './Uploads/'; //設置需要生成縮略圖,僅對圖像文件有效 $upload->thumb = true; // 設置引用圖片類庫包路徑 $upload->imageClassPath = '@.ORG.Image'; //設置需要生成縮略圖的文件後綴 $upload->thumbPrefix = 'm_,s_'; //生產2張縮略圖 //設置縮略圖最大寬度 $upload->thumbMaxWidth = '400,100'; //設置縮略圖最大高度 $upload->thumbMaxHeight = '400,100'; //設置上傳文件規則 $upload->saveRule = 'uniqid'; //刪除原圖 $upload->thumbRemoveOrigin = true; //如果上傳不成功 if (!$upload->upload()) { //捕獲上傳異常 $this->error($upload->getErrorMsg()); } else { //取得成功上傳的文件信息 $uploadList = $upload->getUploadFileInfo(); //導入圖片類 import('@.ORG.Image'); //給m_縮略圖添加水印, Image::water('原文件路徑','水印圖片地址') Image::water($uploadList[0]['savepath'] . 'm_' . $uploadList[0]['savename'], APP_PATH.'Tpl/Public/Images/logo.png'); //圖片名賦值給 字段image $_POST['image'] = $uploadList[0]['savename']; } $model = M('image'); //保存當前數據對象 $data['image'] = $_POST['image']; $data['create_time'] = NOW_TIME; $list = $model->add($data); if ($list !== false) { $this->success('上傳圖片成功!'); } else { $this->error('上傳圖片失敗!'); } } } ?> 上傳成功生成兩張縮略圖 需要說明的是: ThinkPHP裡自帶的圖片上傳類(UploadFile.class.php) 和圖片模型類(Image.class.php),要完整版的ThinkPHP包才有。 沒有的話需要在Lib裡創建一個文件夾(ORG),然後去官網下載擴展包把這兩個文件放到ORG文件夾中。 我的是第二種情況