首先是使用环境
在项目中添加个人信息的时候,需要选择上传图片作为头像还有上传个人简历。头像的格式是必须图片,简历的格式是文档格式(含PDF)
下面是代码带注释//添加用户逻辑操作
public function addUserHandleAction(){
$photo_arr = array('jpg','gif','png','jpeg');//允许上传头像格式
$indus_arr = array('xls','xlsx','doc','docx','wps','txt','pdf','ppt','pptx');//允许上传文档格式
$uploads = new \Think\uploads();//实例化上传
$uploads->maxSize = 2097152 ;// 默认2M大小
$uploads->exts = array_merge($photo_arr,$indus_arr);//拼接上传格式
$uploads->rootPath = './Public/User/';//上传路径
$uploads->savePath = '';
$info = $uploads->uploads();
if(!$info){
$this->error($uploads->getError());//捕获错误
}
//dump($info);die;
$userlogin = array(
//获取用户需要添加的数据
);
//dump($userlogin);die;
M()->startTrans();// 开启事务 操作表
$userid =M('userlogin')->add($userlogin);//获取新增用户的ID
$userinfo=array(
//获取用详细信息表数据
);
//判断页面上 name="IndustryAnalyseUrl"的key可以获取到,且input上传文件选择的格式在规定的格式里且文档大小小于2M
if($info["IndustryAnalyseUrl"]["key"]=="IndustryAnalyseUrl" && in_array(str_replace('.', '', $info["IndustryAnalyseUrl"]["ext"]), $indus_arr) && $info["IndustryAnalyseUrl"]["size"]<1024*1024*2 ){
$userinfo['IndustryAnalyseUrl'] = '/Public/User/'.$info["IndustryAnalyseUrl"]['savepath'].$info["IndustryAnalyseUrl"]['savename'];
}else{
//添加失败不符合要求的文档被删除
unlink('./Public/User/'.$info["IndustryAnalyseUrl"]['savepath'].$info["IndustryAnalyseUrl"]['savename']);
}
//同上
if($info["PhotoUrl"]["key"]=="PhotoUrl" && in_array(str_replace('.', '', $info["PhotoUrl"]["ext"]), $photo_arr) && $info["PhotoUrl"]["size"]<1024*200){
$userinfo['PhotoUrl'] = '/Public/User/'.$info["PhotoUrl"]['savepath'].$info["PhotoUrl"]['savename'];
}else{
//添加失败不符合要求的图片被删除
unlink('./Public/User/'.$info["PhotoUrl"]['savepath'].$info["PhotoUrl"]['savename']);
}
M('userinfo')->add($userinfo);//加入用户详细信息表
$role_user_data = array(
'role_id' => I('post.roleid'),
'user_id' => $userid,
);
//建立权限有角色关系
if(D('role_user')->add($role_user_data)) {
M()->commit();
$this->success("添加用户完成",U("Admin/User/index"));
} else {
//添加失败删除上传的文件
unlink('.'.$userinfo['IndustryAnalyseUrl']);
unlink('.'.$userinfo['PhotoUrl']);
M()->rollback();
$this->error("发生错误!");
}
} else {
M()->rollback();
$this->error("发生错误!");
}
}
总体思路就是获取上传文件实例化会后的info中的字段和文件类型、后缀名还有size进行判断,
属性描述key附件上传的表单名称
savepath上传文件的保存路径
name上传文件的原始名称
savename上传文件的保存名称
size上传文件的大小
type上传文件的MIME类型
ext上传文件的后缀类型
md5上传文件的md5哈希验证字符串 仅当hash设置开启后有效
sha1上传文件的sha1哈希验证字符串 仅当hash设置开启后有效
附上ThinkPHP手册地址:http://www.kancloud.cn/manual/thinkphp/1876