上传表单
上传表单无需特别处理,下面是一个最简单的单文件上传表单:
注意,表单必须添加enctype="multipart/form-data"属性才能支持文件上传功能。
上传操作
接下来就是定义上传操作了,我们在Action控制器中添加upload操作方法如下:
要使用上传功能,首先第一步就是实例化上传类:
代码如下 |
复制代码 |
import('ORG.Net.UploadFile');
$upload = new UploadFile();// 实例化上传类
//参数设置
//设置附件上传目录
$upload->savePath = './Uploads/';
//设置需要生成缩略图,仅对图像文件有效
$upload->thumb = true;
//设置需要生成缩略图的文件后缀
$upload->thumbPrefix = 'm_,s_'; //生产2张缩略图
//设置缩略图最大宽度
$upload->thumbMaxWidth = '200,50';
//设置缩略图最大高度
$upload->thumbMaxHeight = '200,50';
//文件上传代码
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('上传成功!');
}
}
|
注意只支持php文件哦,其它类型的文件会提示非法文件的。
上面讲到的是单文件上传,如果要多文件上传我们只要简单的对表单进行处理
多文件上传
表单如下写法
php处理方法还是单文件上传的没什么变化
代码如下 |
复制代码 |
import("ORG.Net.UploadFile");
$upload = new UploadFile();
foreach ($_FILES as $key=>$file){
if(!empty($file['name'])) {
$upload->autoSub = true;
$upload->subType = 'date';
$info = $upload->uploadOne($file);
if($info){ // 保存附件信息
M('Photo')->add($info);
}else{ // 上传错误
$this->error($upload->getErrorMsg());
}
}
}
|
最新版本的上传类包含的功能如下(有些功能需要结合ThinkPHP系统其他类库):
基本上传功能
支持批量上传
支持生成图片缩略图
自定义参数上传
上传检测(包括大小、后缀和类型)
支持覆盖方式上传
支持上传类型、附件大小、上传路径定义
支持哈希或者日期子目录保存上传文件
支持动态定义子目录保存文件
上传图片的安全性检测
支持上传文件命名规则
支持对上传文件的Hash验证