ThinkPHP圖片上傳

  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文件夾中。

個人是第二種狀況

相關文章
相關標籤/搜索