ThinkPHP是國內比較流行的輕量級的PHP框架,它在國內流行的一個最主要的因素在於它的說明文檔很是健全完善,以及它源碼內的註釋都是中文的,方便於英語能力較差的程序員學習.php
圖片上傳在網站裏是很經常使用的功能.ThinkPHP裏也有自帶的圖片上傳類(UploadFile.class.php) 和圖片模型類(Image.class.php)。方便於咱們去實現圖片上傳功能.css
1.咱們首先須要建立一個表html
1 CREATE TABLE IF NOT EXISTS `tp_image` ( 2 `id` int(11) NOT NULL AUTO_INCREMENT, 3 `image` varchar(200) NOT NULL, 4 `create_time` int(11) NOT NULL, 5 PRIMARY KEY (`id`) 6 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
2.而後再conf文件裏添加配置(最後一段配置是可選的,只是爲了方便統一管理URL路徑)mysql
<?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)sql
<!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模塊上如今尚未這個方法,因而咱們建立它thinkphp
<?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('上傳圖片失敗!'); } } } ?>
最後圖片上傳成功,生成兩張縮略圖:post
須要說明的是:學習
ThinkPHP裏自帶的圖片上傳類(UploadFile.class.php) 和圖片模型類(Image.class.php),要完整版的ThinkPHP包纔有。
沒有的話須要在Lib裏建立一個文件夾(ORG),而後去官網下載擴展包把這兩個文件放到ORG文件夾中。
個人是第二種狀況