我们在对文章进行管理过程中,都会提供图片或者文件上传功能 ,以此来增加系统的交互性。当我们对文章进行修改时,如果重新上传文件,就应该考虑到对已经上传的文件进行删除,以便及时释放存储空间。下面我们就来看看如何来实现重新修改上传文件后如何删除旧文件。

本例在控制器中对数据进行修改时,先调用模型层定义的before_update方法,如果文章原先有图片,则删除;如果修改时再次上传图片,则完成图片上传功能。

Thinkphp5修改文章后删除原先上传图片-LMLPHP

Article. php控制器中的代码:
/***
     * 编辑
     */
    public function edit($id){
        $article=db('article')->find($id);
        if(!$article){
            $this->error('该文章不存在!');
        }
        if(request()->isPost()){
            $data=input('post.');
            //验证提交数据
            $validate=Loader::validate('article');
            if(!$validate->scene('edit')->check($data)){
                $this->error($validate->getError());
            }
            //更新
            //$result=db('article')->update($data);
            $article=new ArticleModel();
            $result=$article->update($data);
            if($result !==false){
                $this->success('文章信息更新成功!','lst');
            }else{
                $this->error('文章信息更新失败!');
            }
        }
        //取出栏目分类
        $cate=new CateModel();
        $catenames=$cate->catetree();
        $this->assign('catenames',$catenames);
        //查询到的某篇文章
        $this->assign('article',$article);
        return $this->fetch();
    }
 
Article.php 模型层中的代码中:
Thinkphp5修改文章后删除原先上传图片-LMLPHP
class Article extends Model
{
    protected static function init()
    {
        Article::event('before_update', function ($data) {
 
            if($_FILES['pic']['tmp_name']){
                $arts=Article::find($data->id);
                //$_SERVER['DOCUMENT_ROOT']已经指向了public网站的根目录
                $thumbpath=$_SERVER['DOCUMENT_ROOT'].$arts['pic'];
                if(file_exists($thumbpath)){
                    @unlink($thumbpath);
                }
            }
            //上传文件进行判断
            $file = request()->file('pic'); // 获取表单上传文件 例如上传了001.jpg
            if($file){
                $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
                if($info){
                    $pic= '/'.'uploads'.'/'.$info->getSaveName();
                    $data['pic']=$pic;
                }else{
                    // 上传失败获取错误信息
                    $data['pic']='';
                }
            }
          });
    }
}
03-08 08:58