本文主要摘自官方ThinkPHP3.2完全开发手册中文件上传这一小节的内容。
ThinkPHP文件上传操作使用Think\Upload 类,假设前面的表单提交到当前控制器的upload方法,下面是upload方法的简便实现代码:
1 public function upload(){ 2 $upload = new \Think\Upload();// 实例化上传类 3 $upload->maxSize = 3145728 ;// 设置附件上传大小 4 $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类 型 5 $upload->savePath = './Public/Uploads/'; // 设置附件上传目录 6 // 上传文件 7 $info = $upload->upload(); 8 if(!$info) {// 上传错误提示错误信息 9 $this->error($upload->getError()); 10 }else{// 上传成功 11 $this->success('上传成功!'); 12 } 13 }
除上述对Upload类进行动态赋值外,还可以利用数组对Upload类进行实例化传入赋值,如下所示:
1 $config = array( 2 'maxSize' => 3145728, 3 'savePath' => './Public/Uploads/', 4 'saveName' => array('uniqid',''), 5 'exts' => array('jpg', 'gif', 'png', 'jpeg'), 6 'autoSub' => true, 7 'subName' => array('date','Ymd'), 8 ); 9 $upload = new \Think\Upload($config);// 实例化上传类
下表是Upload类支持的属性:
属性
|
描述
|
maxSize
| int,默认0,文件上传的最大文件大小(以字节为单位),0为不限大小 |
rootPath
|
String,文件上传保存的根目录
|
savePath
|
String,文件上传保存的目录(相对于根目录)
|
saveName
| String or Array,上传文件的保存规则,支持数组和字符串方式定义 |
saveExt | String,上传文件的保存后缀,默认为使用原文件后缀 |
replace
| boolean,默认false,是否覆盖同名文件 |
exts
| String or Array,默认为空,允许上传的文件后缀(留空为不限制),使用数组或者逗号分隔的字符串 |
mimes
|
String or Array,默认为空,允许上传的文件类型(留空为不限制),使用数组或者逗号分隔的字符串
|
autoSub
| boolean,默认为true,自动使用子目录保存文件,默认为true |
subName
| String or Array,子目录创建方式,采用数组或者字符串方式定义 |
hash
|
boolean,默认为true,是否生成文件的hash编码
|
callback
|
检测文件是否存在回调,如果存在返回文件信息数组
|
返回上传之后的操作结果
设置好上传的参数后,就可以调用Think\Upload 类的upload方法进行附件上传,如果失败,返回 false,并且用getError方法获取错误提示信息;如果上传成功,就返回成功上传的文件信息数组。
1 public function upload(){ 2 $upload = new \Think\Upload();// 实例化上传类 3 $upload->maxSize = 3145728 ;// 设置附件上传大小 4 $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型 5 $upload->savePath = './Public/Uploads/'; // 设置附件上传目录 6 // 上传文件 7 $info = $upload->upload(); 8 if(!$info) {// 上传错误提示错误信息 9 $this->error($upload->getError()); 10 }else{// 上传成功 获取上传文件信息 11 foreach($info as $file){ 12 echo $file['savepath'].$file['savename']; 13 } 14 } 15 }
每个文件信息记录了与上传文件相关的信息的数组,包括:
属性
|
描述
|
key
| 附件上传的表单名称 |
savePath
|
上传文件的保存路径
|
name |
上传文件的原始名称
|
savename
|
上传文件的保存名称
|
size
|
上传文件的大小
|
type
|
上传文件的MIME类型
|
ext
|
上传文件的后缀类型
|
md5
|
上传文件的md5哈希验证字符串,仅当hash设置开启后有效
|
sha1
|
上传文件的sha1哈希验证字符串,仅当hash设置开启后有效
|