您的位置 首页 php

解决thinkphp上传文件中文命名乱码问题

使用 ThinkPHP 自带的文件上传类开发中,有上传文件需求,原来不对savename专门命名,使用随机生成的字符串,考虑到用户体验问题,想根据场景,使用姓名+身份证号的形式保存上传文件。

public function add(){
 if(!IS_POST){
 exit("bad request");
 }
 $upload = new \Think\Upload();// 实例化上传类
 $upload->exts = array('jpg', 'gif', 'png', 'jpeg', 'rar', 'zip');// 设置附件上传类型
 $upload->rootPath = './Upload'; // 设置附件上传目录
 $upload->savePath = '/ file /'; // 设置附件上传(子)目录
 $upload->saveName = I('post.name').'_'.I('post.idnum');//上传文件重命名为 姓名_身份证号形式
 $info = $upload->upload();
 // dump($info);
 $file = $info['file']['savepath'].$info['file']['savename'];
 if ($file == NULL) {
 echo "文件类型错误,请返回修改";
 exit();
 }
 // dump($image);
 $data=I('post.');
 $data['file']=$file;
 // dump($data);exit();
 $Model=D("student");
 $Model->create();
 $num=$Model->add($data);
 if($num>0){
 $name = I('post.idnum');
 $data = M('student');
 $id = $data->getFieldByIdnum($name,'id');
 session('id',$id);
 $this->redirect('/home/form/view/id/'.$id);
 }else{
 $this->error("添加失败!");
 }
}
 

但存入数据库的文件名正确无误,上传到服务器的文件出现乱码问题。如图

经查,TP3.2.3源码上传驱动未指定存储文件名的 字符编码

文件位置: \ThinkPHP\Library\Think\Upload\Driver\Local.class.php 第86行

将其改为

if (!move_uploaded_file($file['tmp_name'],  iconv ('utf-8','gb2312',$filename)))
 

即可。

问题解决。

文章来源:智云一二三科技

文章标题:解决thinkphp上传文件中文命名乱码问题

文章地址:https://www.zhihuclub.com/150200.shtml

关于作者: 智云科技

热门文章

网站地图