我们在对文章进行管理过程中,都会提供图片或者文件上传功能 ,以此来增加系统的交互性。当我们对文章进行修改时,如果重新上传文件,就应该考虑到对已经上传的文件进行删除,以便及时释放存储空间。下面我们就来看看如何来实现重新修改上传文件后如何删除旧文件。
本例在控制器中对数据进行修改时,先调用模型层定义的before_update方法,如果文章原先有图片,则删除;如果修改时再次上传图片,则完成图片上传功能。
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 模型层中的代码中:
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']='';
}
}
});
}
}