【原创】 ThinkPHP上传多文件多类型
栏目:PHP  作者:隆航  阅读:(1498)

首先是使用环境

在项目中添加个人信息的时候,需要选择上传图片作为头像还有上传个人简历。头像的格式是必须图片,简历的格式是文档格式(含PDF)

下面是代码带注释

//添加用户逻辑操作
public function addUserHandleAction(){
$photo_arr = array('jpg','gif','png','jpeg');//允许上传头像格式
$indus_arr = array('xls','xlsx','doc','docx','wps','txt','pdf','ppt','pptx');//允许上传文档格式
$upload = new \Think\Upload();//实例化上传
$upload->maxSize   =     2097152  ;// 默认2M大小
$upload->exts      =     array_merge($photo_arr,$indus_arr);//拼接上传格式
$upload->rootPath  =     './Public/User/';//上传路径
$upload->savePath  =     '';
$info   =   $upload->upload();
if(!$info){
$this->error($upload->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



呆呆呆
#149

   呆呆呆     2016-04-19 12:34    Win 7      湖北省武汉市

学习了,

admin

   admin     04-19 14:04    回复 @呆呆呆 中说到:


昵称
邮箱
域名
  记住 通知博主
验证码

  程序相关

站点版本:青春博客-V 2.1.0

开源版本:青春博客-Beta v2.0

 下载  在线支付  在线工具  在线音乐

  随机文章