TP5通过Ajax上传文件或图片示例

TP5通过Ajax上传文件或图片示例

文件上传,司空见惯。本例主要通过Ajax将文件上传至服务器,thinkphp5后端接收数据后进行简单存储的过程,希望对新手朋友有所帮助。

一、前端页面部分:

  1. <section style="background-color:#fff">
  2.     <ul>
  3.         <li class="clearfix consumption_li">
  4.             <p class="fl">联系电话</p>
  5.             <p class="fr"><input type="text" id="user_phone" placeholder="请输入联系电话"></p>
  6.         </li>
  7.         <li class="clearfix consumption_li">
  8.             <p class="fl">具体位置</p>
  9.             <p class="fr"><input type="text" id="user_address" placeholder="请输入具体位置"></p>
  10.         </li>
  11.         <li class="clearfix consumption_li">
  12.             <p class="fl">详细描述</p>
  13.             <p class="fr"><input type="text" id="user_desc" placeholder="请输入废品种类、数量等描述"></p>
  14.         </li>
  15.         <li class="clearfix consumption_li">
  16.             <input type="file" id="upload_img">
  17.         </li>
  18.     </ul>
  19. </section>
  20. <button class="submit" id="submitBtn">
  21.     提交
  22. </button>
  23. <script src="__TEMP__/{$style}/static/js/jquery.min.js"></script>
  24. <script src="__TEMP__/{$style}/static/js/layer.js"></script>
  25. <script>
  26.     $("#submitBtn").on("click",function(){
  27.         var formdata = new FormData();
  28.         var img_file = document.getElementById("upload_img");
  29.         var fileObj = img_file.files[0];
  30.         var user_phone = $("#user_phone").val();
  31.         var user_address = $("#user_address").val();
  32.         var user_desc = $("#user_desc").val();
  33.         formdata.append("user_phone",user_phone);
  34.         formdata.append("user_address",user_address);
  35.         formdata.append("user_desc",user_desc);
  36.         formdata.append("thumb",fileObj);
  37.         if(user_phone == '' || user_address == ''){
  38.             var tips  ="手机号或地址不能为空"
  39.             sendtips(tips);
  40.         }
  41.         $.ajax({
  42.             url:"{:__URL('APP_MAIN/Recycle/index')}",
  43.             type:"POST",
  44.             data:formdata,
  45.             async:false,  
  46.             processData:false,  
  47.             contentType:false,  
  48.             success:function (result) {
  49.                 if(result.code == 1){
  50.                     sendtips(result.data.message);
  51.                     setTimeout(function () {
  52.                         windows.location.href = "{:__URL('APP_MAIN')}";
  53.                     },2000);
  54.                 }else{
  55.                     sendtips(result.data.message);
  56.                 }
  57.             }
  58.         })
  59.     })
  60.     //页面提示
  61.     function sendtips(content) {
  62.         layer.open({
  63.             content: content
  64.             ,skin: 'msg'
  65.             ,time: 3 //3秒后自动关闭
  66.         });
  67.     }
  68. </script>

简单页面示例,可以看出这是一个表单,包含了字符串和文件。

其中Ajax上传文件时需要注意的是46、47、48这三行代码。

二、后端接收文件部分:

  1. if($this->request->isAjax()){
  2.             $data['user_phone'] = $this->request->post('user_phone','','trim');
  3.             $data['address'] = $this->request->post('user_address','','trim');
  4.             $data['recycle_desc'] = $this->request->post('user_desc','','trim');
  5.             $data['user_id'] = $user_id;
  6.             $user = Db::name("sys_user")->where(['uid'=>$user_id])->field('user_name,uid,nick_name')->find();
  7.             if(emptyempty($user)){
  8.                 return AjaxReturn(0,['message'=>"未登录,请先登录"]);
  9.             }
  10.             $data['user_name'] = emptyempty($user['user_name'])?$user['nick_name']:$user['user_name'];
  11.             if(emptyempty($data['user_phone']) || emptyempty($data['address']) || emptyempty($data['recycle_desc'])){
  12.                 return AjaxReturn(0,['message'=>"信息不完善"]);
  13.             }
  14.             $file = $this->request->file('thumb');
  15.             if($file){
  16.                 $file_path = ROOT_PATH . 'upload' . DS . 'recycle';
  17.                 $info = $file->move($file_path);
  18.                 if($info){
  19.                     $file_name = $info->getSaveName();
  20.                     $file_name = str_replace("\\","/",$file_name);
  21.                     $data['thumb'] = "/upload/recycle/".$file_name;
  22.                 }else{
  23.                     return AjaxReturn(0,['message'=>$file->getError()]);
  24.                 }
  25.             }

上述示例比较简单,很直观的可以看出文件的上传、接收与存储。后端需要注意的是第20行代码,很多人容易忽略,导致上传的图片显示不出来。其实是往往是由于路径分隔符不对造成的。

很简单!

 

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!