封装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 相关文章推荐
让你的网站首页自动选择语言转跳
Dec 06 PHP
PHP中去掉字符串首尾空格的方法
May 19 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
Jun 03 PHP
PHPUnit安装及使用示例
Oct 29 PHP
PHP产生不重复随机数的5个方法总结
Nov 12 PHP
php简单实现屏蔽指定ip段用户的访问
Apr 29 PHP
PHP实现仿Google分页效果的分页函数
Jul 29 PHP
摘自织梦CMS的HTTP文件下载类
Aug 08 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
May 02 PHP
Yii2框架redis基本应用示例
Jul 13 PHP
详解PHP素材图片上传、下载功能
Apr 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
php下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
PHP中的替代语法简介
2014/08/22 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
jQuery实现ajax无刷新分页页码控件
2017/02/28 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
python命令行参数sys.argv使用示例
2014/01/28 Python
Python多继承顺序实例分析
2018/05/26 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
详解python itertools功能
2020/02/07 Python
python的pip有什么用
2020/06/17 Python
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
高中自我评价分享
2013/12/05 职场文书
师德学习感言
2014/01/31 职场文书
初中班主任寄语
2014/04/04 职场文书
临床医师个人自我评价
2014/04/06 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
领导参观欢迎词
2015/01/26 职场文书
入党转正介绍人意见
2015/06/03 职场文书
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js