thinkphp.文件上传

TP中的文件上传:(底层使用了\think\File类)

思路:

①修改form表单:文件上传域及name值,form标签的enctype属性="multipart/form-data"

②在控制器对文件进行处理,将文件保存在指定目录,将文件保存路径存到数据表

html

<div class="well">
    <div>[<a href="javascript:void(0);" class="add">+</a>]商品图片:<input type="file" name="goods_pics[]" value="" class="input-xlarge"></div>
 </div>

<script type="text/javascript">
 $(function(){
    $('.add').click(function(){
       var add_div = '<div>[<a href="javascript:void(0);" class="sub">-</a>]商品图片:<input type="file" name="goods_pics[]" value="" class="input-xlarge"></div>';
         $(this).parent().after(add_div);
        });
           
  });
</script>

②修改Goods控制器save方法,处理文件上传 

 public function save(Request $request)
    {
        //接收参数
        $params = input();
        // 定义验证规则
        $rule = [
            'goods_name|商品名称' => 'require|token',
            'goods_price|商品价格' => 'require|float|egt:0',
            'goods_number|商品数量' => 'require|integer|egt:0'
        ];
        //定义错误提示信息(可选)
        $msg = [
            'goods_price.float' => '商品价格必须是整数或者小数'
        ];
        //调用控制器的validate方法
        $validate = $this->validate($params, $rule, $msg);
        if($validate !== true){
            //验证失败, $validate 就是一个字符串错误信息
            $this->error($validate);
        }
        //文件上传
        $params['goods_logo'] = $this->upload_logo();
        //添加数据到数据表  第二个参数true表示过滤非数据表字段
        \app\admin\model\Goods::create($params, true);
        //页面跳转
        $this->success('操作成功', 'admin/goods/index');
        //$this->error('操作失败');
        //$this->redirect( 'admin/goods/index');
    }
private function upload_logo()
    {
        //获取上传的文件
        $file = request()->file('logo');
        //判断 是否上传了文件
        if(empty($file)){
            $this->error('没有上传文件');
        }
        //移动图片到指定的目录下  /public/uploads/
        $info = $file->validate(['size' => 100*1024*1024, 'ext' => 'jpg,png,gif,jpeg'])->move(ROOT_PATH . 'public' . DS . 'uploads');
        if($info){
            //上传成功  拼接图片的访问路径  /uploads/20190709/fssdsahfdskasa.jpg
            $goods_logo = DS . 'uploads' . DS .$info->getSaveName();
            //生成缩略图  \think\Image类  保存
            //打开图片
            $image = \think\Image::open('.' . $goods_logo);
            // 生成缩略图  保存图片
            $image->thumb(300, 250)->save('.' . $goods_logo);
            //返回图片路径
            return $goods_logo;
        }else{
            //上传失败
            $error_msg = $file->getError();
            $this->error($error_msg);
        }

    }


版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chou142857/article/details/125076201