文件上传功能,即Upload.class.php。上传类可以提供单个文件上传、多个文件上传等方式。
上传表单
//上传单个文件的表单模式
<form action="__CONTROLLER__/upload" enctype="multipart/form-data" method="post">
<input type="text" name="name"/>
<input type="file" name="photo"/>
<input type="submit" value="提交"/>
</form>
//上传多个文件,或者改为photo1、photo2、photo3即可。
<input type="file" name="photo[]"/>
<input type="file" name="photo[]"/>
<input type="file" name="photo[]"/>
在控制器里创建一个upload方法,实现上传功能:
//上传功能
public function upload(){
$upload = new Upload(); //实例化上传类
$upload->maxSize = 3145728; //设置上传大小,字节
$upload->exts = array('jpg','gif','png','jpeg'); //限定后缀(文件格式)
$upload->savePath = './'; //保存在根目录Uploads(如果没有则需要在根目录下手动创建)下
$info = $upload->upload(); //执行上传方法(赋值给变量用于判断成功或失败)
if(!$info){
$this->error($upload->getErroe()); //报错
}else{
$this->success('上传成功'); //成功
}
}
文件上传
在上传操作之前,我们可以对上传的属性进行一些设置,Upload类支持的属性:
.参数 | 描述 |
---|---|
maxSize | 文件上传的最大文件大小(以字节为单位),0为不限大小 |
rootPath | 文件上传保存的根路径 |
savePath | 文件上传的保存路径(相对于根路径) |
saveName | 文件上传的保存规则,支持数组和字符串方式定义 |
saveExt | 文件上传的保存后缀,不设置则使用原文件后缀 |
replace | 存在同名文件是否覆盖,默认为false |
exts | 允许上传的文件后缀(留空为不限制),使用数组或者逗号分割的字符串设置,默认为空 |
mimes | 允许上传的文件类型(留空为不限制),使用数组或者逗号分割的字符串设置,默认为空 |
autoSub | 自动使用子目录保存上传文件,默认为true |
hash | 是否生成文件的hash编码,默认为true |
callback | 检测文件是否存在回调,如果存在返回文件信息数组 |
参数配置有两种方式(大多数类都支持两种方式):
一、实例化方法配置:
$config = array(
'maxSize'=>3145728,
'exts'=>array('jpg','gif','png','jpeg'),
'savePath'=>'./',
);
$upload = new Upload($config);
二、动态配置:
$upload = new Upload();
$upload->maxSize = 3145728;
$upload->exts = array('jpg','gif','png','jpeg');
$upload->savePath='./';
//设置文件名
$upload->saveName = '123'; //容易重名,不推荐使用。
//限制上传文件类型
$upload->mimes=array('image/jpeg');
//设置同名覆盖
$upload->replace = true; //不推荐打开
//不设置子目录
$upload->sutoSub = false; //不推荐关闭
//设置子目录格式
$upload->subName = array('date','Ymd');
//不生成hash编码
$upload->hash = false;
//子目录采用函数返回
$upload->subName='get_user_id';
//在function.php中创建一个函数
function get_user_id(){
return rand();
}
//获取上传文件信息
foreach($info as $file){
echo $file['savepath'].$file['savename'];
}
$file数组可以使用的属性
属性 | 描述 |
---|---|
key | 附件上传的表单名称 |
savepath | 上传文件的保存路径 |
name | 上传文件的原始名称 |
savename | 上传文件的保存名称 |
size | 上传文件的大小 |
type | 上传文件的MIME类型 |
ext | 上传文件的后缀类型 |
md5 | 上传文件的md5哈希验证字符串,仅当hash设置开启后有效 |
sha1 | 上传文件的sha1哈希验证字符串,仅当hash设置开启后有效 |
//获取上传文件信息
foreach($info as $file){
echo $file['key'].'<br/>';
echo $file['savepath'].'<br/>';
echo $file['name'].'<br/>';
echo $file['savename'].'<br/>';
echo $file['size'].'<br/>';
echo $file['type'].'<br/>';
echo $file['ext'].'<br/>';
echo $file['md5'].'<br/>';
echo $file['sha1'].'<br/>';
}