PHP

thinkphp框架之Excel导入导出,jwt使用

公子初心
2022-12-15 / 0 评论 / 45 阅读 / 正在检测是否收录...

1.Excel 上传(thinkPHP6)

public function upload(){
$file = request()->file(request()->post("file"));
//        // 上传到本地服务器
$savename = \think\facade\Filesystem::disk('public')->putFile(request()->post("path"), $file);
//        // 将上传后的文件位置返回给前端
return json(['code' => 0,"savename"=>$savename]);
}

2.Excel 导入(thinkPHP6)

public function readExcel(){
$filename = "upload/".request()->get("savename");
$obj =  PHPExcel_IOFactory::load($filename);
$data['major_id'] = Db::name("major")->where("major_name",$obj->getSheetNames()[0])->value("id");
$data['create_time'] =  date("Y-m-d H:i:s"); // 导入时间
$sheet = $obj->getSheet(0);// 获取第0个sheet
$lesson_list = $sheet->toArray();//把表格的数据转换为数组,注意:这里转换是以行号为数组的外层下标,列号会转成数字为数组内层下标,坐标对应的值只会取字符串保留在这里,图片或链接不会出现在这里。
/*
* 0 => array:5 [
0 => "序号"
1 => "课程阶段"
2 => "课程名称"
3 => "课程编号"
4 => "课程内容"
]
1 => array:5 [
0 => "第1周"
1 => "第一阶段"
2 => "Logic JAVA"
3 => "LogicJAVA-1"
4 => "课程架构分析,java发展史,java特性,java平台版本,dos命令,jdk下载与安装,开发环境搭建,第一个HelloWorld程序"
]
* */
for($i=1;$i<count($lesson_list);$i++){
$data['lesson_stage'] = $lesson_list[$i][1]; // 课程阶段
$data['lesson_name'] = $lesson_list[$i][2]; // 课程名称
$data['lesson_number'] = $lesson_list[$i][3];// 课程编号
$data['lesson_content'] = $lesson_list[$i][4];// 课程内容
Db::name("normal_lesson")->insertGetId($data);
}
}

3.Excel导出(thinkPHP6)

//导出功能
public function export(){
// 获取班级名称
$class_name = request()->get("class_name");
// 根据班级名称查询此班级对应的专业名称
$major_name = Db::name("class_name")
->alias("cn")
->field("m.major_name")
->join("major m","cn.major_id=m.id")
->where("cn.class_name",$class_name)
->value("m.major_name");
// 根据班级名称获取所有属于这个班级的数据
$excel_name = $class_name.".xlsx";
//实例化PHPExcel类,类似于在桌面上新建一个Excel表格
$PHPExcel = new PHPExcel();
//获得当前活动sheet的操作对象
$PHPSheet = $PHPExcel->getActiveSheet();
//给当前活动sheet设置名称
$PHPSheet->setTitle($excel_name);
// 1.逐个单元格去填充数据,适合数据量较大的情况
//给当前活动sheet填充数据,数据填充是按顺序一行一行填充的,假如想给A1留空,可以直接setCellValue('A1','');
//        $PHPSheet->setCellValue('A1','姓名')->setCellValue('B1','分数');
//        $PHPSheet->setCellValue('A2','张三')->setCellValue('B2','50');
// 2.一次性填充数据,适合数据量较小的情况
// 根据当前考场的id 查询当前考场的所有考生信息
$title = ["编号","日期","星期","班级","教室","计划进度","讲师进度","讲师姓名","课时","讲师提交时间","备注"];
$normal_teacher_lesson = Db::name("normal_teacher_lesson")
->field("id,progress_date,progress_week,class_name,room_name,lesson_number,teacher_progress,teacher_name,class_hour,teacher_create_time,remark")
->where("class_name",$class_name)
->order("id asc")
->select()
->toArray();
// 添加表头
array_unshift($normal_teacher_lesson,$title);

$PHPSheet->fromArray($normal_teacher_lesson);
//        //按照指定格式生成Excel文件,'Excel2007'表示生成2007版本的xlsx,
$PHPWriter = PHPExcel_IOFactory::createWriter($PHPExcel,'Excel2007');
//
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器输出07Excel文件
//        //header('Content-Type:application/vnd.ms-excel');//告诉浏览器将要输出Excel03版本文件
//        //告诉浏览器输出excel名称
header("Content-Disposition: attachment;filename=$excel_name");
header('Cache-Control: max-age=0');//禁止缓存
$PHPWriter->save("php://output");
dd();
}

4.jwt thinkphp

composer require firebase/php-jwt
use Firebase\JWT\ExpiredException;
use Firebase\JWT\JWT AS JWTUtil;
use Firebase\JWT\Key;

5.jwt 生成token

// jwt生成token
function createToken($user=[],$exptime=0){
$key = md5(Config::get('app.jwt_secret_key')); // jwt 的签发秘钥
$time = time(); // 签发时间
$expire = $time + $exptime; // 过期时间
$token = array(
$user,
"iss"=>"yunhedata", //签发组织
"aud"=>"zhangxuhui",//签发作者
"iat"=>$time,
"nbf"=>$time,
"exp"=>$expire
);

$jwt = JWTUtil::encode($token,$key,'HS256');
return $jwt;

}

6.jwt校验token

//jwt校验
function verifyToken($token){
// jwt 的密钥
$key =  md5(Config::get('app.jwt_secret_key')); // jwt 的签发秘钥
try{
$jwtAuth = json_encode(JWTUtil::decode($token,new Key($key, 'HS256')));
$authInfo =json_decode($jwtAuth,true);

return ['code'=>0,'msg'=>'token正常','data'=>$authInfo[0]];
}catch (ExpiredException $e){
return ['code'=>1,'msg'=>'token过期','data'=>[]];
}catch (\Exception $e){
return ['code'=>2,'msg'=>'token错误','data'=>[]];
}
}
0

评论 (0)

取消