封装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 相关文章推荐
phpBB BBcode处理的漏洞
Oct 09 PHP
把PHP安装为Apache DSO
Oct 09 PHP
php 不同编码下的字符串长度区分
Sep 26 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
Jan 19 PHP
CentOS安装php v8js教程
Feb 26 PHP
PHP面向对象程序设计类的定义与用法简单示例
Dec 27 PHP
关于PHP中协程和阻塞的一些理解与思考
Aug 11 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
实例介绍PHP中zip_open()函数用法
Feb 15 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
Oct 22 PHP
PHP实现笛卡尔积算法的实例讲解
Dec 22 PHP
php中数组最简单的使用方法
Dec 27 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时间函数使用详解
2019/03/21 PHP
PHP7 list() 函数修改
2021/03/09 PHP
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
window.onerror()的用法与实例分析
2016/01/27 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
2020/12/24 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
Vue数据驱动模拟实现2
2017/01/11 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
python生成随机密码或随机字符串的方法
2015/07/03 Python
Python检测生僻字的实现方法
2016/10/23 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
Python实现TCP通信的示例代码
2019/09/09 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
毕业生就业自荐书
2013/12/15 职场文书
大学生社团活动总结
2014/04/26 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
市场拓展计划书
2014/05/03 职场文书
党员活动日总结
2014/05/05 职场文书
体现团队精神的口号
2014/06/06 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
岗位安全生产责任书
2014/07/28 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
Laravel中获取IP的真实地理位置
2021/04/01 PHP
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL