ThinkPHP 之 文件上传类 UploadFile.class.php 的使用方法
ThinkPHP的文件上传类UploadFile.class.php位于ThinkPHPLibORGNet文件内下,其对于文件上传的处理非常的强大和方便。内置的文件上传类UploadFile类提供了下面的功能:
1、上传检测
2、多文件上传
3、自动生成上传图片缩略图
4、支持覆盖方式上传
5、支持上传类型、附件大小、上传路径定义
6、采用IFrame方式的Ajax上传机制支持
7、支持上传文件命名规则
8、支持对上传文件的Hash规则
9、可设置是否保存附件数据到数据库
在上传表单中可以进行很多参数的设置对上传进行灵活的定义,Action类的_upload方法会自动进行相关处理。
要更好的理解上传保存操作,可以参考ThinkPHP的附件数据表结构,更加详细下面的UploadFile类的参数和使用方法可以参考文件上传类的使用。
首先不要忘记对提交表单的form添加enctype=”multipart/form-data”,否则,是无法上传文件的。
<FORM METHOD=POST enctype="multipart/form-data" ACTION="__URL__/insert"> <TABLE> <TR> <TD align="right">用户名:</TD> <TD><INPUT TYPE="text" NAME="name"></TD> </TR> <TR> <TD align="right">密码:</TD> <TD><INPUT TYPE="password" name="password"></TD> </TR> <TR> <TD align="right">昵称:</TD> <TD><INPUT TYPE="text" NAME="nickname"></TD> </TR> <TR> <TD align="right">邮箱:</TD> <TD><INPUT TYPE="text" NAME="email"></TD> </TR> <TR> <TD align="right">头像:</TD> <TD><INPUT TYPE="file" name="photo" ></TD> </TR> <TR> <TD align="right"></TD> <TD><INPUT TYPE="submit" value="注册"></TD> </TR> </TABLE> </FORM>
这里的头像input的name填写可以随意,只要不和其他input冲突就可以,ThinkPHP自己就会检测到的。除非当有多个文件一起上传,并且需要良好的对应关系时,再注意下。
现在,通过以下代码,即可实现保存表单,并保存相应的图片信息。
$usersM = M('user');
$result = $usersM->create();
if ( $result ) {
if ( empty($result['id']) ) {
unset($result['id']);
$return = $usersM ->add($result);
$id = $return;
}else {
$id = $result['id'];
$return = $usersM ->where( array('id'=>$id) )->save($result);
}
if ( $return ) {
import("ORG.Net.UploadFile");
$upload = new UploadFile();//实例化上传类
$upload->maxSize = 3145728 ; // 设置附件上传大小
$upload->allowExts = array('jpg', 'gif', 'png', 'jpeg');//设置上传类型限制
$upload->savePath = './Public/Upload/Pics/'; //设置上传路径限制
$upload->saveRule = time();//保存文件的命名规则,这里以时间戳为文件名
$result = $upload->upload();//保存上传文件,获取上传信息
if( !$result ) {
if ( $upload->getErrorMsg() != '没有选择上传文件') {//这个判断是用户不上传头像时不报错,通过。
$this->error($upload->getErrorMsg());
}
}else {
$uploadList = $upload->getUploadFileInfo();//获取上传文件成功后的结果
$savename = $uploadList[0]['savename'];//获取保存的文件名
$result = $usersM ->where( array('id'=>$id) )->save( array('user_avatar' => $savename ));//更新头像对应的文件名
if ( !$result ) {
$this->error($usersM ->getLastSql());
}
}
$this->success('保存成功!');
}else {
$this->error('插入数据时出错,请重试。'.$usersM ->getLastSql());
}
}else {
$this->error('数据有误,请重试');
}











