`

thinkphp——上传新图并且删除旧图的操作

    博客分类:
  • PHP
PHP 
阅读更多

【前言】

   本文介绍下如何实现thinkphp——上传新图并且删除旧图的操作

 

【主体】

   原理很简单,与上传操作原理类似。不过在上传前添加了删除操作。

(1)控制器里添加操作

//addData方法
		public function addData($post,$file){
			//判断是否有文件上传
			if($file['error'] == '0'){
				//1. 配置数组,定义配置
				$cfg = array(
					//配置上传路径
					'rootPath'	=>	WORKING_PATH . UPLOAD_ROOT_PATH
				);
				$upload = new \Think\Upload($cfg);//2. 实例化上传类
				$info = $upload->uploadOne($file);//3. 上传操作,并接受上传结果
				if ($info) {
					//原图路径,成功后补全字段
					$post['picture'] = UPLOAD_ROOT_PATH . $info['savepath'] . $info['savename'];
					$post['filename'] = $info['name'];//文件的原始名
					$post['hasfile'] = 1;//是否有文件
					//缩略图制作
					$image = new \Think\Image(); //1. 实例化类
					$imgPath = WORKING_PATH.$post['picture'];//2. 打开图片,传递图片路径.统一使用根路径
					$image->open($imgPath);
					$image->thumb(100,100);//3. 制作缩略图,等比缩放
					//4. 保存图片,传入路径--完整路径(绝对路径目录+文件名)
					$image->save(WORKING_PATH.UPLOAD_ROOT_PATH.$info['savepath'].'thumb_'.$info['savename']);
					$post['thumb'] = UPLOAD_ROOT_PATH.$info['savepath'].'thumb_'.$info['savename'];//5. 补全thumb字段
				}
			}
			// 补全字段addtime
			$post['addtime'] = time();
			//添加操作
			return $this->add($post);
		}

(2)更新操作

//更新数据保存
		public function updateData($post,$file){
			if(!$file['error']){
				$cfg = array(
					'rootPath' => WORKING_PATH.UPLOAD_ROOT_PATH
				);
				$fileInfo = M('article')->where('id='.$post['id'])->find();
				$string1=$fileInfo['thumb'];
				$thumb=substr_replace($string1,'',0,15);
				unlink(WORKING_PATH.UPLOAD_ROOT_PATH.$thumb);//删除原来thumb
				$string2=$fileInfo['picture'];
				$picture=substr_replace($string2,'',0,15);
				unlink(WORKING_PATH.UPLOAD_ROOT_PATH.$picture);//删除原来picture
				//上传新附件
				$upload = new \Think\Upload($cfg);
				$info = $upload->uploadOne($file);
				if($info){
					$post['picture'] = UPLOAD_ROOT_PATH . $info['savepath'] . $info['savename'];
					$post['filename'] = $info['name'];//文件的原始名
					$post['hasfile'] = 1;
					//缩略图制作
					$image = new \Think\Image();
					$imgPath = WORKING_PATH.$post['picture'];
					$image->open($imgPath);
					$image->thumb(100,100);
					$image->save(WORKING_PATH.UPLOAD_ROOT_PATH.$info['savepath'].'thumb_'.$info['savename']);
					$post['thumb'] = UPLOAD_ROOT_PATH.$info['savepath'].'thumb_'.$info['savename'];//5. 补全thumb字段
				}else{
					//上传失败
				}
			}else{
				//没有文件,则不进行处理
			}

 

【总结】

   ①上面标红的地方即为删除原图

   ②知识点:php 在不知道字符串有多长的情况下,去除前几个字符?

$string='字符串';
$subject=substr_replace(string,'',0,3);

   这里我在入口文件定义了工作路径,所以需要截取拼接字符串

//定义工作路径
define('WORKING_PATH', str_replace('\\','/',__DIR__));
//定义上传根目录
define('UPLOAD_ROOT_PATH', '/Public/Upload/');

 

 

 

 

 

 

 

 

.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics