ThinkPHP+Layui图片异步上传

  • 2019 年 12 月 27 日
  • 筆記

Thinkphp5.1版本的图片上传代码和以前版本没有什么变化,主要说下异步上传图片,使用layui框架上传单张图片之服务器,服务器返回图片地址给前台,然后前台渲染数据。

代码一:HTML代码

<div class="layui-form-item">      <label class="layui-form-label">头像</label>      <div class="layui-input-inline">          <button type="button" class="layui-btn layui-btn-primary" id="uploadUserHead">              <i class="layui-icon"></i>上传图片          </button>          <input type="hidden" name="userhead" id="userhead">          <input class="layui-upload-file" type="file" accept="undefined" name="userhead">      </div>  </div>

注意事项:

1、定义id='uploadUserHead' ,需要与 JS 代码内绑定元素一致

2、使用隐藏域,用来存储上传成功后的图片路径

代码二:JS代码

//注意进度条依赖 element 模块,否则无法进行正常渲染和功能性操作  layui.use(['element','upload'], function(){      var element = layui.element;      var upload = layui.upload;      var uploadUserHead = upload.render({          elem: '#uploadUserHead' //绑定元素          ,url: '/admin/User/uploadUserHead' //上传接口          ,size: 2048 //大可允许上传的大小,单位 KB          ,field: 'userhead'          ,done: function(res){              //上传完毕回调              if(res.code == 200){                  layer.msg(res.msg,{                      icon:1,time:2000                  },function () {                      $("#userhead").val(res.data);                  })              }else{                  layer.msg(res.msg,{                      icon:2,time:2000                  })              }          }          ,error: function(){              layer.msg('JS error, please check');          }      });

注意事项:

1、模式上传方式为post上传,可通过method,进行定义

2、图片类型默认为jpg|png|gif|bmp|jpeg ,正常可默认设置

3、文件域的字段名可通过field进行设置

4、最大文件上传大小通过size设置,默认为0,不限制大小,单位:kb

代码三:PHP代码

/**   * 图片上传   * @return thinkresponseJson   */  public function getuploadUserHead()  {      // 获取表单上传文件      $file = request()->file('userhead');      // 移动到框架应用根目录/uploads/ 目录下      $path = './uploads/';      $info = $file->move($path);      if($info) {          // 成功上传后 获取上传信息          return json(['code' => 200, 'msg' => '上传成功', 'data' => mb_substr($path, 1) .date('Ymd',time())."/". $info->getFilename()]);      }      else {          // 上传失败获取错误信息          return json(['code' => 100, 'msg' => $file->getError()]);      }  }

注意事项:

1、需要写明接收文件字段名

2、上传路径需注意写清

3、返回成功信息时注意路径,个人写法规避 无法解析问题