thinkphp達到UploadFile.class.php圖片上傳功能

eddie小英俊發表於2017-11-22
片上傳在站點裡是非經常常使用的功能.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.選擇圖片,點選上傳button後,會跳到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目錄中。

我是另一種情況


版權宣告:本文博主原創文章,部落格,未經同意,不得轉載。

本文轉自mfrbuaa部落格園部落格,原文連結:http://www.cnblogs.com/mfrbuaa/p/4758479.html,如需轉載請自行聯絡原作者


相關文章