//定义文件上传相关目录常量 define('ROOT_PATH', __DIR__); define('UPLOAD_PATH', '/Public/Uploads/');
//现在model封装一个上传logo图片的方法
public function upload_logo($file, $data){ //在添加商品基本数据之前,先实现文件上传,得到图片地址信息 if($file && $file['error'] == 0){ //实例化文件上传类 //自定义配置数据 $config = array( 'maxSize' => 5 * 1024 * 1024, //上传的文件大小限制 (0-不做限制) byte 'exts' => array('jpg', 'png', 'gif', 'jpeg'), //允许上传的文件后缀 'rootPath' => ROOT_PATH . UPLOAD_PATH, //保存根路径 ); $upload = new \Think\Upload($config); $upload_res = $upload -> uploadOne($file); // dump($upload_res);die; if(!$upload_res){ //上传失败,获取错误信息 $error = $upload -> getError(); //将上传类的错误信息,记录到模型类上error属性上 $this -> error = $error; return false; } //上传成功,需要拼接文件保存路径,用于添加到数据表 $data['goods_big_img'] = UPLOAD_PATH . $upload_res['savepath'] . $upload_res['savename']; //商品logo图片上传成功,生成缩略图 // 实例化Image类 $image = new \Think\Image(); // 使用open方法打开原始图片(需要真实的文件路径) $image -> open( ROOT_PATH . $data['goods_big_img']); // 使用thumb方法生成缩略图(需要传递最大宽度和最大高度限制) $image -> thumb(188, 188); // 使用save方法保存缩略图图片(需要真实的文件路径) $thumb_img = UPLOAD_PATH . $upload_res['savepath'] . 'thumb_' . $upload_res['savename']; $image -> save( ROOT_PATH . $thumb_img); //将缩略图的路径保存到$data中,最终保存到数据表 $data['goods_small_img'] = $thumb_img; //数据处理成功,返回新的$data return $data; }else{ return $data; } }
在controller里面调用
public function add(){ //处理两个业务逻辑 一个是页面展示 另一个是表单提交 //根据请求方式判断 if(IS_POST){ //表单提交 $data = I('post.'); //对富文本年编辑器字段,防范xss攻击 $data['introduce'] = I('post.introduce', '', 'remove_xss'); $model = D('Goods'); //调用模型中封装的upload_logo $data = $model -> upload_logo($_FILES['logo'], $data); if(!$data){ //上传过程中出错 $error = $model -> getError(); $this -> error($error); } if(!$model -> create($data)){ //create方法执行失败 //通过getError方法获取错误信息 $error = $model -> getError(); //直接报错到页面 $this -> error($error); } $res = $model -> add();//使用create方法之后,这里不需要传递参数了 if($res){ //添加成功 跳转到列表页 // $this -> redirect('Admin/Goods/index');//直接跳转,不显示提示信息 $this -> success('添加成功', U('Admin/Goods/index')); }else{ //添加失败 返回添加页面 $this -> error('添加失败'); } }else{ $this -> display(); } }