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、返回成功資訊時注意路徑,個人寫法規避 無法解析問題