Dragon-v

PHP TP5 Ajax图片上传

1.先写出前端页面
  (1).Html代码

    <form>
      <div class="form-group">
        <label>商品logo:</label>
        <input type="file" class="form-control logo" accept="image/gif,image/jpeg,image/x-png">
        <span></span>
      </div>
      <button type="button" class="btn btn-primary">添加</button>
    </form>

  (2).jQuery代码

//给表单一个改变事件
    $('.logo').change(function(event) {
      var formData = new FormData();
      formData.append("file", $(this).get(0).files[0]);
      $.ajax({
        //请求地址
        url:"{:url('test/Seek/logo')}",
        //请求方式必须是post
        type:'POST',
        dataType:"json",
        data:formData,
        cache: false,
        contentType: false, //不可缺
        processData: false, //不可缺
        success:function(data){
        if (data.code == 1){
          //如果不明白为什么要替换标签 首先可以打印一下 data.phone 可以试试有没有数据
          //如果有 则替换标签 目的是为了 ajax上传时接值
          //此步骤也是将后端上传后的文件名显示在页面上
          $(".logo").next().html("<font class='goods_logo'>"+data.goods_logo+"</font>")
        }
      }
    });
  });

  (3).效果如下

2.后端代码

public function logo(){
    //获取前端文件
    $file = $this->request->file('file');
    //判断文件是否为空
    if (!empty($file)) {
      // 移动到框架应用根目录/public/uploads/ 目录下,并且验证大小与类型
      $info = $file->validate(['size' => 1048576, 'ext' => 'jpg,png,gif'])->rule('uniqid')->move(ROOT_PATH . 'public' . DS . 'uploads');
      if ($info) {
        // 成功上传后 获取上传信息
        $goods_logo = '/uploads/'.$info->getSaveName();
        //此步骤为缩略图制作
        $image = \think\Image::open(".".$goods_logo);
        // 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.png
        $image->thumb(150, 150)->save(".".$goods_logo);
      } else {
        // 上传失败获取错误信息
        $file->getError();
      }
    } else {
      $goods_logo = '';
    }
    //判断一下返回相对应的三要素
    if($goods_logo !== ''){
      return ['code'=>1,'msg'=>'成功','goods_logo'=>$goods_logo];
    }else{
      return ['code'=>404,'msg'=>'失败','goods_logo'=>''];
    }
  }

3.上传成功后效果如下

posted on 2021-09-02 15:35  Dragon-v  阅读(167)  评论(0编辑  收藏  举报