封装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 adodb连接带密码access数据库实例,测试成功
May 14 PHP
数据库查询记录php 多行多列显示
Aug 15 PHP
PHP 数组遍历方法大全(foreach,list,each)
Jun 30 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
php如何调用webservice应用介绍
Nov 24 PHP
PHP JS Ip地址及域名格式检测代码
Sep 27 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
PHP进程同步代码实例
Feb 12 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
10个可以简化php开发过程的MySQL工具
2010/04/11 PHP
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
phpStorm2020 注册码
2020/09/17 PHP
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
学习Node.js模块机制
2016/10/17 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
详解python3百度指数抓取实例
2016/12/12 Python
python实现视频分帧效果
2019/05/31 Python
python实现动态数组的示例代码
2019/07/15 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
Linux上比较文件的命令都有哪些
2013/09/28 面试题
大学生毕业自我鉴定范文
2013/09/19 职场文书
2015年公司后勤管理工作总结
2015/05/13 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS