文件上传
一. 上传表单
在 WeiBo/Home/View/User/index.html 里写入以下代码:
1 <!--上传单个文件的表单模式--> 2 <form action="__CONTROLLER__/upload" enctype="multipart/form-data" method="post"> 3 <input type="file" name="photo" /> 4 <input type="submit" value="提交"/> 5 </form>
在 WeiBo/Home/Controller/UserController.class.php 中的代码为:
1 <?php 2 3 namespace Home\Controller; 4 use Think\Controller; 5 use Think\Upload; 6 7 class UserController extends Controller { 8 public function index() { 9 $this->display(); 10 } 11 public function upload() { 12 $upload=new Upload(); //实例化上传类 13 $upload->maxSize=3145728; //设置上传大小,字节 14 $upload->exts=array('jpg','gif','png','jpeg'); //限定后缀 15 $upload->savePath='./'; //在根目录Uploads下 16 $info=$upload->upload(); //执行上传方法 17 if(!$info) { 18 $this->error($upload->getError()); 19 }else { 20 $this->success('上传成功'); 21 } 22 } 23 }
注:上传文件需引用 Think/Upload 此时在demo39下新建uploads文件,与WeiBo同级,否则会在上传时出现警告: 上传根目录不存在!请尝试手动创建:./Uploads/
二.文件上传
在上传操作之前,我们可以对上传的属性进行一些设置,Upload 类支持的属性:
参数 | 描述 |
maxSize | 文件上传的最大文件大小(以字节为单位),0为不限大小 |
rootPath | 文件上传保存的根路径 |
savePath | 文件上传的保存路径(相对于根路径) |
saveName | 上传文件的保存规则,支持数组和字符串方式定义 |
saveExt | 上传文件的保存后缀,不设置的话使用原文件后缀 |
replace | 存在同名文件是否是覆盖,默认为 false |
exts |
允许上传的文件后缀(留空为不限制),使用数组或者逗号分隔 |
mimes |
允许上传的文件类型(留空为不限制),使用数组或者逗号分隔 |
autoSub | 自动使用子目录保存上传文件 默认为 true |
subName | 子目录创建方式,采用数组或者字符串方式定义 |
hash | 是否生成文件的 hash 编码 默认为 true |
callback | 检测文件是否存在回调,如果存在返回文件信息数组 |
1 //实例化配置参数 2 $config = array( 3 'maxSize'=>3145728, 4 'exts'=> array('jpg','gif','png','jpeg'), 5 'savePath'=>'./', 6 ); 7 $upload = new Upload($config);
1 //动态配置参数 2 $upload = new Upload(); 3 $upload->maxSize = 3145728; 4 $upload->exts = array('jpg','gif','png','jpeg'); 5 $upload->savePath = './';
配置参数是可使用以上两种配置方法
一下是一些配置的具体参数:
1 //设置文件名 2 $upload->saveName = '123';
1 //限制上传文件类型 2 $upload->mimes = array('image/jpeg');
1 //设置同名覆盖 2 $upload->replace = true;
1 //不设置子目录 2 $upload->autoSub = false;
1 //设置子目录格式 2 $upload->subName = array('date','Ymd');
1 //不生成hash编码 2 $upload->hash = false;
//子目录采用函数返回 $upload->subName = 'get_user_id'; //在 WeiBo/Common/Common/function.php 中创建一个函数 function get_user_id() { return rand(); }
1 //获取上传文件信息 2 foreach ($info s as $file) { 3 echo $file['savepath'].$file['savename']; 4 }
$file 数组可以使用的属性
属性 | 描述 |
key | 附件上传的表单名称 |
savepath | 上传文件的保存路径 |
name | 上传文件的原始名称 |
savename | 上传文件的保存名称 |
size | 上传文件的大小 |
type | 上传文件的 MIME 类型 |
ext | 上传文件的后缀类型 |
md5 | 上传文件的 md5哈希验证字符串 仅当 hash 设置开启后有效 |
sha1 | 上传文件的 sha1哈希验证字符串 仅当 hash 设置开启后有效 |
1 foreach ($info as $file) { 2 echo $file['key'].'<br />'; 3 echo $file['savepath'].'<br />'; 4 echo $file['name'].'<br />'; 5 echo $file['savename'].'<br />'; 6 echo $file['size'].'<br />'; 7 echo $file['type'].'<br />'; 8 echo $file['ext'].'<br />'; 9 echo $file['md5'].'<br />'; 10 echo $file['sha1'].'<br />'; 11 }
可在判定上传文件成功后 $this->success('上传成功!'); 输出文件信息。