这篇文章主要介绍了封装ThinkPHP的一个文件上传方法,以实例的形式详细讲述了文件上传类的实现以及具体功能讲解,非常实用,需要的朋友可以参考下
本文实例讲述了封装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框架程序设计有所帮助。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于使用think-queue来实现普通队列和延迟队列的相关内容,think-queue是thinkphp官方提供的一个消息队列服务,下面一起来看一下,希望对大家有帮助。

本站4月17日消息,集邦咨询(TrendForce)近日发布报告,认为英伟达Blackwell新平台产品需求看涨,预估带动台积电2024年CoWoS封装总产能提升逾150%。英伟达Blackwell新平台产品包括B系列的GPU,以及整合英伟达自家GraceArmCPU的GB200加速卡等。集邦咨询确认为供应链当前非常看好GB200,预估2025年出货量有望超过百万片,在英伟达高端GPU中的占比达到40-50%。在英伟达计划下半年交付GB200以及B100等产品,但上游晶圆封装方面须进一步采用更复

本站7月9日消息,AMDZen5架构“Strix”系列处理器会有两种封装方案,其中较小的StrixPoint将采用FP8封装,而StrixHalo将会采用FP11封装。图源:videocardz消息源@Olrak29_最新曝料称StrixHalo的FP11封装尺寸为37.5mm*45mm(1687平方毫米),和英特尔AlderLake、RaptorLakeCPU的LGA-1700封装尺寸相同。AMD最新的PhoenixAPU采用FP8封装方案,尺寸为25*40mm,这意味着StrixHalo的F

PHP中的封装技术及应用封装是面向对象编程中的一个重要概念,它指的是将数据和对数据的操作封装在一起,以便提供对外部程序的统一访问接口。在PHP中,封装可以通过访问控制修饰符和类的定义来实现。本文将介绍PHP中的封装技术及其应用场景,并提供一些具体的代码示例。一、封装的访问控制修饰符在PHP中,封装主要通过访问控制修饰符来实现。PHP提供了三个访问控制修饰符,

Vue中Axios封装及其常用方法介绍Axios是一款基于Promise实现的HTTP库,它的优点在于具有良好的可读性、易用性以及可扩展性。Vue作为一款流行的前端框架,也对Axios提供了全面支持。本文将介绍如何在Vue中进行Axios封装,并且介绍Axios常用的一些方法。一、Axios封装在开发过程中,我们常常需要对Axios进行一些自定义的封装,例如

通过封装代码,C++函数可以提高GUI开发效率:代码封装:函数将代码分组到独立单元,使代码易于理解和维护。可重用性:函数可创建通用功能供应用程序中重复使用,减少重复编写和错误。简洁代码:封装代码使主逻辑简洁,便于阅读和调试。

本站7月11日消息,经济日报今天(7月11日)报道,富士康集团已进军先进封装领域,重点布局时下主流的面板级扇出封装(FOPLP)半导体方案。1.继旗下群创光电(Innolux)之后,富士康集团投资的夏普(Sharp)也宣布进军日本面板级扇出式封装领域,预计将于2026年投产。富士康集团在AI领域本身就有足够的影响力,而补上先进封装短板之后让其可以提供“一条龙”服务,便于后续接受更多的AI产品订单。本站查询公开资料,富士康集团目前持有夏普10.5%的股权,该集团表示现阶段不会增持,也不会减持,将维

如何在Go语言中实现封装和继承封装和继承是面向对象编程中的两个重要概念,它们可以使代码更加模块化和可维护,同时也为代码的复用提供了便利。本文将介绍在Go语言中如何实现封装和继承,并提供相应的代码示例。封装封装是将数据和功能进行封装,隐藏实现的细节,只暴露必要的接口给外部使用。在Go语言中,封装是通过导出和非导出标识符来实现的。首字母大写的标识符可以被其他包访


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 中国語版
中国語版、とても使いやすい

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ホットトピック



