//添加文章
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用啊
添加回答
举报
0/150
提交
取消