封装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 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
Mar 23 PHP
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
Jun 24 PHP
关于crontab的使用详解
Jun 24 PHP
PHP里的单例类写法实例
Jun 25 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 PHP
PHP中Array相关函数简介
Jul 03 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
Jun 17 PHP
PHP PDOStatement::fetch讲解
Jan 31 PHP
php将xml转化对象的实例详解
Nov 17 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
一个简洁的多级别论坛
2006/10/09 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
用ADODB.Stream转换
2007/01/22 Javascript
早该知道的7个JavaScript技巧
2013/03/27 Javascript
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
js判断上传文件类型判断FileUpload文件类型代码
2014/05/20 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
详解小程序循环require之坑
2019/03/08 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
python实现文件的备份流程详解
2019/06/18 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
python实现图片横向和纵向拼接
2020/03/05 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
个人生活学习自我评价范文
2013/11/26 职场文书
委托证明范本
2014/11/25 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
护士旷工检讨书
2015/08/15 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS