当前位置:首页 > CMS教程 > Thinkphp > 列表

thinkphp实现图片上传功能分享

发布:smiling 来源: PHP粉丝网  添加日期:2020-10-15 13:45:51 浏览: 评论:0 

图片上传在网站里是很常用的功能.ThinkPHP里也有自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php)。方便于我们去实现图片上传功能,下面是实现方法。

1.我们首先需要创建一个表,代码如下:

  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路径),代码如下:

  1. <?php 
  2. return array
  3.         'URL_MODEL'    =>    2, // 如果你的环境不支持PATHINFO 请设置为3 
  4.         'DB_TYPE'    =>    'mysql'
  5.         'DB_HOST'    =>    'localhost'
  6.         'DB_NAME'    =>    'thinkphp'
  7.         'DB_USER'    =>    'root'
  8.         'DB_PWD'    =>    ''
  9.         'DB_PORT'    =>    '3306'
  10.         'DB_PREFIX'    =>    'tp_'
  11.  
  12.         'SHOW_PAGE_TRACE' =>true,        //显示页面调试明细 
  13. //phpfensi.com 
  14.         'TMPL_PARSE_STRING' =>  array// 地址替换,用_UPLOAD_目录 代替 根目录下的Upload目录 
  15.          '__UPLOAD__'    =>  __ROOT__.'/Uploads'
  16.      ), 
  17. ); 
  18. ?> 

3.添加一个Image模块(名字可以随便取),代码如下:

  1. <?php 
  2.     class ImageAction extends Action{         
  3.  
  4.         /** 
  5.          * 创建index 入口方法 
  6.          */ 
  7.         public function index(){ 
  8.             $image=M('Image');                        
  9.             $data=$image->order('create_time desc')->find();    //获取最后上传图片 
  10.             $this->assign('data',$data); 
  11.             $this->display(); 
  12.         }  
  13. ?> 

4.创建相应index视图文件(index.html),代码如下:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  2. <html> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  5. <title>Insert title here</title> 
  6. <style type="text/css"> 
  7.     #img{height:22px; border:#000 2px solid} 
  8.     #button{height:30px; width:100px;} 
  9. </style> 
  10. </head> 
  11. <body> 
  12.     <div class="result" >上传允许文件类型:gif png jpg 图像文件,并生成2张缩略图,其中大图带水印,生成后会删除原图。</div><br> 
  13.     <notempty name="data"><img src="__UPLOAD__/m_{$data.image}" /> <img src="__UPLOAD__/s_{$data.image}" /></notempty> 
  14.     <form action="__URL__/upload" method="post" enctype="multipart/form-data"> 
  15.         <input type="file" name="image" id="img"/> 
  16.         <input type="submit" value="上传" id="button">  
  17.     </form> 
  18. </body> 
  19. </html> 

5.选择图片,点击上传按钮后,会跳到Image模块的upload方法上,Image模块上现在还没有这个方法,于是我们创建它,代码如下:

  1. <?php 
  2.     class ImageAction extends Action{         
  3.  
  4.         /** 
  5.          * 创建index 入口方法 
  6.          */ 
  7.         public function index(){ 
  8.             $image=M('Image');                         
  9.             $data=$image->order('create_time desc')->find();    //获取最后上传图片 
  10.  
  11.             var_dump($data); 
  12.             $this->assign('data',$data); 
  13.             $this->display(); 
  14.         }  
  15.  
  16.         //如果上传的文件不为空,跳转到_upload方法 
  17.         public function upload(){         
  18.             //如果不为空 
  19.             if(!emptyempty($_FILES)) 
  20.             { 
  21.                 $this->_upload(); 
  22.             } 
  23.  
  24.         } 

6.如果提交的不是NULL,则跳到_upload方法上,此方法实现图片上传的功能,代码如下:

  1. <?php 
  2.     class ImageAction extends Action{         
  3.  
  4.         /** 
  5.          * 创建index 入口方法 
  6.          */ 
  7.         public function index(){ 
  8.             $image=M('Image');                         
  9.             $data=$image->order('create_time desc')->find();    //获取最后上传图片 
  10.  
  11.             var_dump($data); 
  12.             $this->assign('data',$data); 
  13.             $this->display(); 
  14.         }  
  15.  
  16.          
  17.         //如果上传的文件不为空,跳转到_upload方法 
  18.         public function upload(){         
  19.             //如果不为空 
  20.             if(!emptyempty($_FILES)) 
  21.             { 
  22.                 $this->_upload(); 
  23.             } 
  24.  
  25.         } 
  26.  
  27.          
  28.         /*** 
  29.          * 实现图片上传 
  30.          */ 
  31.         public function _upload(){ 
  32.             import('@.ORG.UploadFile'); 
  33.             //导入上传类 
  34.             $upload = new UploadFile(); 
  35.             //设置上传文件大小 
  36.             $upload->maxSize            = 3292200; 
  37.             //设置上传文件类型 
  38.             $upload->allowExts          = explode(',''jpg,gif,png,jpeg'); 
  39.             //设置附件上传目录 
  40.             $upload->savePath           = './Uploads/'
  41.             //设置需要生成缩略图,仅对图像文件有效 
  42.             $upload->thumb              = true; 
  43.             // 设置引用图片类库包路径 
  44.             $upload->imageClassPath     = '@.ORG.Image'
  45.             //设置需要生成缩略图的文件后缀 
  46.             $upload->thumbPrefix        = 'm_,s_';  //生产2张缩略图 
  47.             //设置缩略图最大宽度 
  48.             $upload->thumbMaxWidth      = '400,100'
  49.             //设置缩略图最大高度 
  50.             $upload->thumbMaxHeight     = '400,100'
  51.             //设置上传文件规则 
  52.             $upload->saveRule           = 'uniqid'
  53.             //删除原图 
  54.             $upload->thumbRemoveOrigin  = true; 
  55.  
  56.              
  57.             //如果上传不成功 
  58.             if (!$upload->upload())  
  59.             { 
  60.                 //捕获上传异常 
  61.                 $this->error($upload->getErrorMsg()); 
  62.             }  
  63.             else  
  64.             { 
  65.                 //取得成功上传的文件信息 
  66.                 $uploadList = $upload->getUploadFileInfo(); 
  67.  
  68.                  
  69.                 //导入图片类 
  70.                 import('@.ORG.Image');                 
  71.  
  72.                 //给m_缩略图添加水印, Image::water('原文件路径','水印图片地址') 
  73.                 Image::water($uploadList[0]['savepath'] . 'm_' . $uploadList[0]['savename'], APP_PATH.'Tpl/Public/Images/logo.png'); 
  74.  
  75.                 //图片名赋值给 字段image 
  76.                 $_POST['image'] = $uploadList[0]['savename']; 
  77.             } 
  78.             $model  = M('image'); 
  79.             //保存当前数据对象 
  80.             $data['image']          = $_POST['image']; 
  81.             $data['create_time']    = NOW_TIME; 
  82.             $list   = $model->add($data); 
  83.             if ($list !== false)  
  84.             { 
  85.                 $this->success('上传图片成功!'); 
  86.             }  //phpfensi.com 
  87.             else  
  88.             { 
  89.                 $this->error('上传图片失败!'); 
  90.             } 
  91.         }         
  92.     } 
  93. ?> 

上传成功生成两张缩略图

需要说明的是:ThinkPHP里自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php),要完整版的ThinkPHP包才有。

没有的话需要在Lib里创建一个文件夹(ORG),然后去官网下载扩展包把这两个文件放到ORG文件夹中。

我的是第二种情况。

Tags: thinkphp图片上传

分享到: