//添加文章 public function addArticle(){ $data = request()->post(); //一、处理缩略图 //创建目录 $path = 'static/image/'.date('ymd',time()); $temp = 'temp'; $thumb = 'upload'; if(!file_exists($path)){ mkdir($path,777,true); } if(!file_exists($temp)){ mkdir($temp,777,true); } if(!file_exists($thumb)){ mkdir($thumb,777,true); } $file = request()->file('thumb'); if($file) { $info = $file->validate([ 'ext' => 'jpg,png,gif'])->rule('md5')->move($temp);//验证 if($info){ $pathname = $info->getPathname(); $filename = $info->getFilename(); $info = \think\Image::open($pathname); $img = $info->thumb(200, 200)->save($thumb.'/'. $filename); if($img){ $data['imgPath'] = $thumb.'/'. $filename; unlink($pathname);//删除临时文件 } }else{ $info->getError(); } } //二、处理 UEditor 内容中的图片信息 $pattern = '/(\/)?(\w+\/)+\w+\.(jpg|png|gif)/'; $res = preg_match_all($pattern,$data['content'],$row); if($res){ //有图片信息就处理 //1.检测临时图片文件是否存在 foreach ($row[0] as $k=>$v){ //由于只能以入口文件为参考点,所以preg_replacepu bublic之前的目录,获取临时文件路径 $pattern2 = '/\/?(\w+\/)+public\//'; $v = preg_replace($pattern2,'',$v); if(file_exists($v)){ //2.转存图片,把临时路径存入数组,方面后面删除使用 $this->linkinfo['old'][] = $v; $filename = pathinfo($v,PATHINFO_BASENAME); //3.替换内容图片路径,把新路径存入数组,方面后面删除 $res = copy($v,$path.'/'.$filename); $this->linkinfo['new'][] = $path.'/'.$filename; if($res){ $data['content'] = str_replace($v,$path.'/'.$filename,$data['content']); } }else{ $this->insertOne($data); } }//endforeach //4.数据插入数据库 $res = $this->insertOne($data); if($res){ //删除临时图片文件 foreach ($this->linkinfo['old'] as $k=>$v){ unlink($v); } return true; }else{ //删除临时图片,另存图片,缩略图 foreach ($this->linkinfo['old'] as $k=>$v){ unlink($v); } foreach ($this->linkinfo['new'] as $k=>$v){ unlink($v); } unlink($thumb.'/'. $filename); return false; } }else{ //没有图片信息,直接处理 $res = $this->insertOne($data); return $res; } } public function insertOne($data){ $res = Article::insert($data); return $res; }
虽然能用,但感觉没这么绕吧?顺便问下,怎么让Image::open()不直接跳错误页面,让我IF用啊