封装ThinkPHP的一个文件上传方法实例


Posted in PHP onOctober 31, 2014

本文实例讲述了封装ThinkPHP的一个文件上传方法,分享给大家供大家参考。具体如下:

这阵子,对WBlog的上传功能作了优化。改进后的上传功能可以实现缩略图上传,图片上传,生成水印,文件上传,并且可以在后台对上传的附件进行大小(文件大小),类型(文件类型),水印(针对图片)的进行设置。此外还可以对上传的文件进行分类保存到相应的文件夹里,方便管理。

下面是对改进后的上传功能作简约的说明。

缩略图上传

先前的缩略图上传功能使用了KindEditor的上传组件,除非上传之前对图片进行缩略处理,不然上传的是原图,改进后的上传功能可以通过系统对缩略图的大小进行设置,不管你上传的原图有多大,都会生成设置的大小的图片,并且自动删除原图,有效地减少垃圾信息的累积。上传的缩略图自动保存到Thumb文件夹

图片上传

上传图片,可以根据需要设置图片的大小、上传图片的类型和添加水印。

文件上传

如压缩文件,文档文件等,可根据需要添加上传文件类型和大小。

添加水印

对上传的图片添加水印。

上面的上传功能我把它封装在模型类AttachModel.class.php里,用两个方法搞定:

/**      

    * 附件上传:上传图片,缩略图,文件      

    * @param string $model 上传所在模块      

    * @param bool $type 上传文件的类型::image(图片);thumb(缩略图);file(文件)      

    */

             

public function upload($model = null, $type = 'image'){      

       //导入上传类      

       import('ORG.NET.UploadFile');      

       $upload = new UploadFile();      

       $upload->saveRule = 'uniqid'; //设置上传文件规则      

       $upload->maxSize = C('MAXSIZE')*1024*1024;   //上传文件大小          

       $upload->allowExts = explode(',', C('ALLOWEXTS'));//文件类型      

                

       if ($model){      

           $upload->savePath = './Public/Uploads/'.$model.'/';      

           if (!file_exists($upload->savePath)) {      

             mkdir($upload->savePath);      

           }      

       }else{      

           $upload->savePath = './Public/Uploads/Thumb/';      

           if (!file_exists($upload->savePath)) {      

             mkdir($upload->savePath);      

           }      

       }      

       if (in_array($type,array('image','thumb'))){      

           $upload->thumb = true;      

           $upload->thumbRemoveOrigin  = true;// //删除原图      

           $upload->thumbPrefix = 'wb_';          

           $upload->thumbMaxWidth = $type=='thumb' ? C('THUMB_W') :C('IMAGE_W');//缩略图宽度      

           $upload->thumbMaxHeight = $type=='thumb' ? C('THUMB_H') :C('IMAGE_H');//缩略图高度          

                            

       }      

       if (!$upload->upload()) {      

           return $upload->getErrorMsg();      

       }else{      

           $uploadlist = $upload->getUploadFileInfo();      

           if(C('ISWATER') && $type=='image'){      

             import('ORG.Util.Image');      

             //给m_缩略图添加水印, Image::water('原文件名','水印图片地址')      

             foreach ($uploadlist as $key => $value){      

               Image::water($value['savepath'] . 'wb_' . $value['savename'], './Public/admin/images/water.png');      

            }      

           }      

       }      

       if (in_array($type,array('image','file'))){      

           return $this->_add($uploadlist,$model);      

       }else{      

           return $uploadlist[0]['savename'];//返回缩略图保存名称      

       }             

   }      

   /*      

    * 上传的附件整合成attach所需数据,存入表并返回数组      

    * */

   private function _add($uploadlist,$module=''){      

       //$j = count($uploadlist);      

       $v = array();      

       foreach ($uploadlist as $key => $value){      

                    

           $v[$key]['name']        =   $value['name'];      

           $v[$key]['savename']    =   $value['savename'];      

           $v[$key]['savepath']    =   substr($value['savepath'], 2);      

           $v[$key]['size']        =   $value['size'];      

           $v[$key]['userId']      =   $_SESSION[C('USER_AUTH_KEY')];      

           $v[$key]['uploadTime']  =   time();      

           $v[$key]['alt']                 =   $_POST['alt'][$key];      

           $v[$key]['module']          =   $_POST['module'];//当前项目路径       

           $v[$key]['recordId']    =   $_POST['recordId'];//当前项目路径       

           $this->add($v[$key]);      

           if($this->thumb){      

                        

               $v[$key]['prefix']      =   $this->thumbPrefix;                    

           }      

           $v[$key]['id'] = M('Attach')->getLastInsID();                  

       }      

       return $v;      

}

希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

PHP 相关文章推荐
PHP+MYSQL的文章管理系统(一)
Oct 09 PHP
PHP与MySQL开发的8个技巧小结
Dec 17 PHP
PHP Switch 语句之学习笔记
Sep 21 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
php开发工具有哪五款
Nov 09 PHP
PHP框架性能测试报告
May 08 PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 PHP
php阳历转农历优化版
Aug 08 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
Dec 15 PHP
PHP实现的观察者模式实例
Jun 21 PHP
php的优点总结 php有哪些优点
Jul 19 PHP
PHPstorm激活码2020年5月13日亲测有效
Sep 17 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 #PHP
ThinkPHP控制器间实现相互调用的方法
Oct 31 #PHP
ThinkPHP上使用多说评论插件的方法
Oct 31 #PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 #PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 #PHP
php使用fopen创建utf8编码文件的方法
Oct 31 #PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 #PHP
You might like
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
php smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
2017/06/09 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
Javascript - HTML的request类
2006/07/15 Javascript
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
javascript Array.remove() 数组删除
2009/08/06 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
下载给定网页上图片的方法
2014/02/18 Python
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
python复制文件到指定目录的实例
2018/04/27 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
python之生成多层json结构的实现
2020/02/27 Python
残疾人小组计划书
2014/04/27 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
单位委托书怎么写
2014/09/21 职场文书
Python的这些库,你知道多少?
2021/06/09 Python
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
详解Spring事件发布与监听机制
2021/06/30 Java/Android
使用python绘制分组对比柱状图
2022/04/21 Python