20.7 文件上传
匿名 · 更新于 2013/12/31
上传类使用ORG.Net.UploadFile类,最新版本的上传类包含的功能如下(有些功能需要结合ThinkPHP系统其他类库):
- 基本上传功能
- 支持批量上传
- 支持生成图片缩略图
- 自定义参数上传
- 上传检测(包括大小、后缀和类型)
- 支持覆盖方式上传
- 支持上传类型、附件大小、上传路径定义
- 支持哈希或者日期子目录保存上传文件
- 上传图片的安全性检测
- 支持上传文件命名规则
- 支持对上传文件的Hash验证
<input type="file" name="photo1"><input type="file" name="photo2"><input type="file" name="photo3">
注意表单的Form标签中一定要添加 enctype=”multipart/form-data”文件才能上传。因为表单提交到当前模块的upload操作方法,所以我们在模块类里面添加下面的upload方法即可:
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{// 上传成功 获取上传文件信息$info = $upload->getUploadFileInfo();}// 保存表单数据 包括附件数据$User = M("User"); // 实例化User对象$User->create(); // 创建数据对象$User->photo = $info[0]['savename']; // 保存上传的照片根据需要自行组装$User->add(); // 写入用户数据到数据库$this->success('数据保存成功!');}
import('ORG.Net.UploadFile');$upload = new UploadFile();// 实例化上传类
| maxSize | 文件上传的最大文件大小(以字节为单位)默认为-1 不限大小 |
| savePath | 文件保存路径,如果留空会取UPLOAD_PATH常量定义的路径 |
| saveRule | 上传文件的保存规则,必须是一个无需任何参数的函数名,例如可以是 time、 uniqid com_create_guid 等,但必须能保证生成的文件名是唯一的,默认是uniqid |
| hashType | 上传文件的哈希验证方法,默认是md5_file |
| autoCheck | 是否自动检测附件,默认为自动检测 |
| uploadReplace | 存在同名文件是否是覆盖 |
| allowExts | 允许上传的文件后缀(留空为不限制),使用数组设置,默认为空数组 |
| allowTypes | 允许上传的文件类型(留空为不限制),使用数组设置,默认为空数组 |
| thumb | 是否需要对图片文件进行缩略图处理,默认为false |
| thumbMaxWidth | 缩略图的最大宽度,多个使用逗号分隔 |
| thumbMaxHeight | 缩略图的最大高度,多个使用逗号分隔 |
| thumbPrefix | 缩略图的文件前缀,默认为thumb_ |
| thumbSuffix | 缩略图的文件后缀,默认为空 |
| thumbPath | 缩略图的保存路径,留空的话取文件上传目录本身 |
| thumbFile | 指定缩略图的文件名 |
| thumbRemoveOrigin | 生成缩略图后是否删除原图 |
| autoSub | 是否使用子目录保存上传文件 |
| subType | 子目录创建方式,默认为hash,可以设置为hash或者date |
| dateFormat | 子目录方式为date的时候指定日期格式 |
| hashLevel | 子目录保存的层次,默认为一层 |
$upload->thumb = true;$upload->thumbMaxWidth = '50,200';$upload->thumbMaxHeight = '50,200';
设置好上传的参数后,就可以调用UploadFile类的upload方法进行附件上传,如果失败,返回false,并且用getErrorMsg方法获取错误提示信息;如果上传成功,可以通过调用getUploadFileInfo方法获取成功上传的附件信息列表。因此getUploadFileInfo方法的返回值是一个数组,其中的每个元素就是上传的附件信息。每个附件信息又是一个记录了下面信息的数组,包括:
| key | 附件上传的表单名称 |
| savepath | 上传文件的保存路径 |
| name | 上传文件的原始名称 |
| savename | 上传文件的保存名称 |
| size | 上传文件的大小 |
| type | 上传文件的MIME类型 |
| extension | 上传文件的后缀类型 |
| hash | 上传文件的哈希验证字符串 |
如果需要使用多个文件上传,只需要修改表单,把
<input type='file' name='photo'>
<input type='file' name='photo1'><input type='file' name='photo2'><input type='file' name='photo3'>
<input type='file' name='photo[]'><input type='file' name='photo[]'><input type='file' name='photo[]'>
