封装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简单的留言板与回复功能具体实现
Feb 19 PHP
codeigniter中测试通过的分页类示例
Apr 17 PHP
PHP临时文件的安全性分析
Jul 04 PHP
Yii查询生成器(Query Builder)用法实例教程
Sep 04 PHP
php图片的二进制转换实现方法
Dec 15 PHP
php实现的一个简单json rpc框架实例
Mar 30 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
Jan 15 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
php微信公众平台配置接口开发程序
Sep 22 PHP
php版微信js-sdk支付接口类用法示例
Oct 12 PHP
php中文乱码问题的终极解决方案汇总
Aug 01 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 11 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
2020最新CPU的性能排名
2020/04/02 数码科技
php csv操作类代码
2009/12/14 PHP
PHP实现今天是星期几的几种写法
2013/09/26 PHP
详解PHP的Yii框架中的Controller控制器
2016/03/29 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
2019/02/28 PHP
php多进程应用场景实例详解
2019/07/22 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
详解html-webpack-plugin插件(用法总结)
2018/09/12 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
从零学python系列之数据处理编程实例(二)
2014/05/22 Python
Python采用raw_input读取输入值的方法
2014/08/18 Python
用Python遍历C盘dll文件的方法
2015/05/06 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
python实现感知机模型的示例
2020/09/30 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
环境科学毕业生自荐信
2013/11/21 职场文书
会议开幕词
2015/01/28 职场文书
评职称个人总结
2015/03/05 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书