封装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分页显示制作详细讲解
Oct 09 PHP
PHP extract 将数组拆分成多个变量的函数
Jun 30 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
Codeigniter生成Excel文档的简单方法
Jun 12 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
php+xml编程之SimpleXML的应用实例
Jan 24 PHP
php实现用手机关闭计算机(电脑)的方法
Apr 22 PHP
使用PHP编写发红包程序
Jul 22 PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 PHP
PHP利用imagick生成组合缩略图
Feb 19 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
Feb 06 PHP
PHP实现文件下载【实例分享】
Apr 28 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
如何在PHP中使用Oracle数据库(4)
2006/10/09 PHP
php adodb分页实现代码
2009/03/19 PHP
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
php查找字符串出现次数的方法
2014/12/01 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
基于jquery的无限级联下拉框js插件
2011/10/29 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
js调用css属性写法
2013/09/21 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
VUE重点问题总结
2018/03/19 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
详解python的super()的作用和原理
2020/10/29 Python
基于Python实现天天酷跑功能
2021/01/06 Python
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
精彩的推荐信范文
2013/11/26 职场文书
大学生职业生涯规划方案
2014/01/03 职场文书
大学生学期自我鉴定
2014/03/19 职场文书
六年级学生评语大全
2014/12/26 职场文书
年会邀请函范文
2015/01/30 职场文书
应届生简历自我评价
2015/03/11 职场文书
领导离职感言
2015/08/03 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python