ThinkPHP上传文件

如果是核心版ThinkPHP仍需要下载扩展类

1.上传表单

<form id="upload" method='post' action="__URL__/upload/" enctype="multipart/form-data">

<input name="image" type="file" />

<input type="submit" value="提交" >

</form>

2.上传操作

// 文件上传

public function upload() {

import('ORG.Net.UploadFile');

$upload = new UploadFile();// 实例化上传类

$upload->maxSize = 3145728 ;// 设置附件上传大小

$upload->allowExts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型

$upload->savePath = './Public/Uploads/';// 设置附件上传目录

if(!$upload->upload()) {// 上传错误提示错误信息

$this->error($upload->getErrorMsg());

}else{// 上传成功

$this->success('上传成功!');

}

}

3.参数设置

maxSize 文件上传的最大文件大小(以字节为单位)默认为-1 不限大小

savePath 文件保存路径(必须)

saveRule 上传文件的保存规则,必须是一个无需任何参数的函数名,例如可以是 time、 uniqid com_create_guid 等,但必须能保证生成的文件名是唯一的,默认是uniqid

hashType 上传文件的哈希验证方法,默认是md5_file

autoCheck 是否自动检测附件,默认为自动检测

uploadReplace 存在同名文件是否是覆盖

allowExts 允许上传的文件后缀(留空为不限制),使用数组设置,默认为空数组

allowTypes 允许上传的文件类型(留空为不限制),使用数组设置,默认为空数组

thumb 是否需要对图片文件进行缩略图处理,默认为false

thumbMaxWidth 缩略图的最大宽度,多个使用逗号分隔

thumbMaxHeight 缩略图的最大高度,多个使用逗号分隔

thumbPrefix 缩略图的文件前缀,默认为thumb_

thumbSuffix 缩略图的文件后缀,默认为空

thumbPath 缩略图的保存路径,留空的话取文件上传目录本身

thumbFile 指定缩略图的文件名

thumbExt 指定缩略图的扩展名

thumbRemoveOrigin 生成缩略图后是否删除原图

autoSub 是否使用子目录保存上传文件

subType 子目录创建方式,默认为hash,可以设置为hash、date或者custom

subDir 子目录名称 subType为custom方式后有效

dateFormat 子目录方式为date的时候指定日期格式

hashLevel 子目录保存的层次,默认为一层

//设置附件上传目录

$upload->savePath = './Uploads/';

//设置需要生成缩略图,仅对图像文件有效

$upload->thumb = true;

//设置需要生成缩略图的文件后缀

$upload->thumbPrefix = 'm_,s_'; //生产2张缩略图

//设置缩略图最大宽度

$upload->thumbMaxWidth = '200,50';

//设置缩略图最大高度

$upload->thumbMaxHeight = '200,50';

getUploadFileInfo方法的返回值是一个二维数组,其中的每个元素就是上传的附件信息。每个附件信息又是一个记录了下面信息的数组,包括:

key 附件上传的表单名称

savepath 上传文件的保存路径

name 上传文件的原始名称

savename 上传文件的保存名称

size 上传文件的大小

type 上传文件的MIME类型

extension 上传文件的后缀类型

hash 上传文件的哈希验证字符串(作用是检验文件完整性)

4.多文件上传

<input type='file' name='image1'>

<input type='file' name='image2'>

<input type='file' name='image3'>

或者<input type='file' name='image[]'>

<input type='file' name='image[]'>

<input type='file' name='image[]'>

5.单个上传

6.上传文件的命名规范:确保文件不会产生冲突或者覆盖的情况。

1)采用函数方式:$upload->saveRule = 'time'; // 采用时间戳命名

$upload->saveRule = 'com_create_guid'; // 采用GUID序列命名

也可以采用用户自定义函数:$upload->saveRule = 'myfun'; // 采用自定义函数命名

2)直接设置上传文件名:$upload->saveRule = time().'_'.mt_rand();

7.子目录保存

三种方式设置子目录:

1)哈希子目录:$upload->subType = 'hash';

$upload->hashLevel = 2;

设置后,会自动对上传文件进行哈希编码后的第一个和第二个字母分别作为一级和二级子目录名称保存。如果hashLevel不设置,则默认为一级子目录。

2)日期子目录:$upload->subType = 'date';

$upload->dateFormat = 'Y-m-d';

3)自定义子目录:$upload->subType = 'custom';

$upload->subDir = get_user_id();

自定义子目录方式的优势在于,可以动态设置子目录名称

8.生成缩略图

//设置需要生成缩略图,仅对图像文件有效

$upload->thumb = true;

//设置需要生成缩略图的文件前缀

$upload->thumbPrefix = 'm_,s_'; //生产2张缩略图

//设置缩略图最大宽度

$upload->thumbMaxWidth = '200,50';

//设置缩略图最大高度

$upload->thumbMaxHeight = '200,50';

//设置生成缩略图后移除原图

$upload->thumbRemoveOrigin = true;

【注意】缩略图的前(后)缀数量必须和宽度数量对应,表示生成多个缩略图。生成的缩略图默认位于保存文件的实际所在目录(包括子目录的情况)。当然你也可以指定统一的缩略图保存路径,例如:$upload->thumbPath = './Uploads/thumb/';

我们可以设置缩略图采用统一的文件后缀,例如:

// 设置缩略图的固定后缀

$upload->thumbExt = 'jpg';

【20.验证码】:需要图像处理类和字符处理类String的扩展。由于验证码显示采用了GD库支持,所以需要环境支持GD库。

1.生成验证码

为了避免受权限控制的影响,我们通常把这个方法放到公共Action或者无需授权就能访问的控制器(例如PublicAction)中,下面我们以放到PublicAction控制器类中为例,代码如下:

class PublicAction extends Action{

Public function verify(){

import('ORG.Util.Image');

Image::buildImageVerify();

}

}

定义后,我们可以在任何需要验证码的模块中调用Public模块的verify方法来显示验证码,需要做的仅仅是在需要的模板中添加如下调用代码:

< img src='__APP__/Public/verify/' />

如果你的验证码不能正常显示,请检查:

是否已经安装GD库支持并正常开启;

Image类库以及String类库是否在正确的位置以及是否正确导入;

验证码输出之前是否有任何的其他输出(尤其是UTF8的BOM头信息输出);

2.验证码显示设置:

buildImageVerify($length,$mode,$type,$width,$height,$verifyName)

length 验证码的长度,默认为4位数

model 验证字符串的类型,默认为数字,其他支持类型有0 字母 1 数字 2 大写字母 3 小写字母 4中文 5混合

type 验证码的图片类型,默认为png

width 验证码的宽度,默认会自动根据验证码长度自动计算

height 验证码的高度,默认为22

verifyName 验证码的SESSION记录名称,默认为verify

3.验证输入

在Action中使用下面的代码判断就行了:

if(session('verify') != md5($_POST['verify'])) {

$this->error('验证码错误!');

}

4.中文验证码

BuildImageVerify方法不支持中文验证码的显示,如果需要显示中文验证码,请使用GBVerify方法,用法示例:

Public function verify(){

import("ORG.Util.Image");

Image::GBVerify();

}

5.验证码刷新

一般我们是用js方法来控制验证码的刷新

<script language="JavaScript">

function fleshVerify(){

//重载验证码

var time = new Date().getTime();

document.getElementById('verifyImg').src= '__APP__/Public/verify/'+time;

}

</script>

< img id="verifyImg" src='__APP__/Public/verify/' onclick="fleshVerify()" />

本文分享自微信公众号 - Tech爬虫(php_pachong),作者:爬虫

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 工作量评估

    我理解的工作量估算,就是估算软件项目所耗费的资源数,这个资源包含人力和时间,一般用人天、人月的形式来衡量。(而软件的成本=耗费的资源*资源的单价)。而且我个人觉...

    公众号php_pachong
  • 向表里写数据-create add

    create就是一个处理数据的函数,处理提交上来的表单数据,完成高级模型的数据处理要求,返回处理好的数据.

    公众号php_pachong
  • jQuery中的$是什么

    但在JS应用库JQUERY的作者将之做为一个自定义函数名了,这个函数是获取指定网页元素的函数,使用非常之频繁,所以好多新手不知道,还以为$是JS的什么特殊语法。

    公众号php_pachong
  • PCIe系列第二讲、PCIe的OSI模型与事务层分析(上)

    PCIe协议定义了三层结构,分别是:物理层、数据链路层、事务层,每个层次按照协议中规定的内容,完成相应的数据处理功能,各层都分为发送和接收两功能块。

    根究FPGA
  • Delta Lake 学习笔记(一)

    今天 Spark + AI Summit 2019 宣布开源了 Delta Lake 这个项目,关于这个项目的背景我就不赘述了,砖厂官网有很多介绍,包括项目的 ...

    runzhliu
  • Java管理扩展指南之MBean简介

    MBean是一个被管理的Java对象,就像Javabean组件一样,但是它遵从JMX规范的设计模式。MBean可以表示设备、应用或者任何需要被管理的资源。MBe...

    哲洛不闹
  • Linux笔记(1)| 常用命令

    从今天开始将会陆续更新一些有关Linux的笔记,从arm裸机到uboot的移植、Linux应用编程和网络编程再到Linux驱动开发。同时也会夹杂更新stm32对...

    飞哥
  • ios开发中解决UILabel上文字不能右对齐的问题

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823
  • 2.3 基于FPGA的UART协议实现(二)简单UART传输FPGA实现

          图2 34 FPGA发送一帧串口数据(考虑波特率)   如果图2 34考虑 115200 的波特率,结果如图2 34所示,每一位数据都保持 434 ...

    碎碎思
  • 弹幕君,别挡着我看小姐姐!

    内容来源:本文转自微信公众号—— Crossin的编程教室(ID: crossincode),好文请多支持!感谢您的阅读~

    IT大咖说

扫码关注云+社区

领取腾讯云代金券