封装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执行zip与rar解压缩方法实现代码
Dec 05 PHP
PHP实现手机归属地查询API接口实现代码
Aug 27 PHP
基于PHP输出缓存(output_buffering)的深入理解
Jun 13 PHP
php设计模式之单例、多例设计模式的应用分析
Jun 30 PHP
PHP实现HTML生成PDF文件的方法
Nov 07 PHP
php封装的连接Mysql类及用法分析
Dec 10 PHP
yum命令安装php7和相关扩展
Jul 04 PHP
PHP编程实现计算抽奖概率算法完整实例
Aug 09 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
Sep 04 PHP
PHP中“=>
Mar 01 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/03 咖啡文化
PHP实现的简单日历类
2014/11/29 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
详解ES6中的 Set Map 数据结构学习总结
2018/11/06 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
python字典改变value值方法总结
2019/06/21 Python
Python 获取项目根路径的代码
2019/09/27 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
Myprotein瑞士官方网站:运动营养和健身网上商店
2019/09/25 全球购物
艺术设计专业个人求职信
2013/09/21 职场文书
员工廉洁自律承诺书
2014/05/26 职场文书
大学活动总结模板
2014/07/10 职场文书
2014年采购部工作总结
2014/11/20 职场文书
五年级数学教学反思
2016/02/16 职场文书
数学复习课教学反思
2016/02/18 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
MySQL如何解决幻读问题
2021/08/07 MySQL
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android