封装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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
用PHP调用数据库的存贮过程!
Oct 09 PHP
php实现的遍历文件夹下所有文件,编辑删除
Jan 05 PHP
PHP 验证码的实现代码
Jul 17 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
Aug 19 PHP
PHP中if和or运行效率对比
Dec 12 PHP
深入浅析PHP7.0新特征(五大新特征)
Oct 29 PHP
PHP实现原比例生成缩略图的方法
Feb 03 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
PHP数组操作简单案例分析
Oct 15 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 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
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
PHP $_FILES函数详解
2011/03/09 PHP
php判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
Laravel框架表单验证详解
2014/09/04 PHP
YII2自动登录Cookie总是失效的解决方法
2017/06/28 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
2014/04/11 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
webpack4.x CommonJS模块化浅析
2018/11/09 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
python中合并两个文本文件并按照姓名首字母排序的例子
2014/04/25 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
html5利用canvas实现颜色容差抠图功能
2019/12/23 HTML / CSS
加拿大时装零售商:Influence U
2018/12/22 全球购物
应届生船舶驾驶求职信
2013/10/19 职场文书
经理助理岗位职责
2014/03/05 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
旷工辞退通知书
2015/04/17 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
遗失证明范文
2015/06/19 职场文书
详解OpenCV曝光融合
2022/04/29 Python