這篇文章主要介紹了關於thinkphp 下多圖ajax上傳圖片,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
碰到一個項目,有一個比較繁瑣的功能6個ajax上傳,基本上每個上傳邏輯多不一樣,記錄一下
thinkphp的view頁面:
#id方便找到這個元素name一定要加[ ]
<div class="btns"> <a href="javascript:;" class="a-upload"> <input type="file" id="fileaq" name="fileaq[]" data-filesType="words" class="uploadInput" multiple="multiple" /> <i class="iconfont icon-shangchuan"></i>上传附件 </a> <a href="javascript:void(0)" class="submit" id="aq_sub">发布</a> </div>
點選發布先判定一下,然後在把需要的參數傳遞給doUploadFiles函數
//发布案情 $('#aq_sub').click(function() { var guanxi = 'many_one'; var type_file = 'file'; var type_name = 'fileaq'; var anqing = $('#anqing').val(); if ($.trim(anqing).length == 0) { layer.alert('请输入内容!\n'); $('#anqing').focus(); return false; } else { var cate_id = 3; doUploadFiles(cate_id, type_file, type_name, guanxi, anqing); } })
參數說明
cate_id:多個上傳的識別id
type_file: 判斷是圖片還是檔案上傳(nofiley:有的檔案不需要上傳)
type_name:上傳檔案的id
guanxi:關係 專案需要參數分為many_one,many_many,one_one(多個用戶每人一條數據,多個用戶每人多條數據,多個用戶一人一條數據)
content:內容
function doUploadFiles(cate_id, type_file, type_name, guanxi, content) { var guanxi = arguments[3] ? arguments[3] : 'many_one'; //设置关系 var formData = new FormData(); var fangchan_id = $('#fangchan_id').val(); formData.append("fangchan_id", fangchan_id); formData.append("cate_id", cate_id); formData.append("guanxi", guanxi); formData.append("content", content); if(type_file !='nofile'){ formData.append("type_file", type_file); formData.append("file_length", $("#"+type_name)[0].files.length); for(var i=0; i<$("#"+type_name)[0].files.length;i++){ formData.append('file[]',$("#"+type_name)[0].files[i]); } } $.ajax({ url: '/Property/jindiaoHandle', type: 'POST', data: formData, dataType: "json", async: false, cache: false, contentType: false, processData: false, success: function(data) { console.log('上传:',data) if (data.status == 200) { layer.msg(data.msg, { icon: 1 }); window.location.reload(); } else { layer.msg(data.msg, { icon: 1 }); return false; } } }); }
php程式碼比較長
/** * 提交房源尽调 */ public function jindiaoHandle() { $user_id = session('user_id'); $fangchan_id = I('post.fangchan_id'); $cate_id = I('post.cate_id'); $cate_arr = array('6','7','8'); $content = I('post.content'); $type_file = I('post.type_file'); $file_length = I('post.file_length'); //判断是否上传文件 //many_one 多个用户存在一条 many_many 多个用户存在多条 one_one 只能催在一条数据 $guanxi = I('post.guanxi'); $guanxi?$guanxi:'many_one'; $content?$content:'0'; if(empty($user_id)){ $ret = ['status' => '1001', 'msg' => '请先登录!'.$user_id, 'data' => '']; $this->ajaxReturn($ret, 'json'); }else{ $level = M('users')->where(['user_id' => $user_id])->getField('level'); //判断是不是法拍经理 if ($level != 2) { $ret = ['status' => '1002', 'msg' => '您没有权限填写!', 'data' => '']; $this->ajaxReturn($ret); } } if(empty($fangchan_id)) { $ret = ['status' => '1003', 'msg' => '找不到此房源!', 'data' => '']; $this->ajaxReturn($ret); } if(empty($cate_id)) { $ret = ['status' => '1004', 'msg' => '找不到此尽调类型!', 'data' => '']; $this->ajaxReturn($ret); } if(empty($content)) { $ret = ['status' => '1005', 'msg' => '内容不能为空!', 'data' => '']; $this->ajaxReturn($ret); } $fc_user_id = M('fangchan')->where(['fangchan_id' => $fangchan_id])->getField('user_id'); //判断是不是该房产的法拍经理 if ($fc_user_id == $user_id) { $data = [ 'fangchan_id' => $fangchan_id, 'user_id' => $user_id, 'cate_id' => $cate_id, 'content' => $content, 'res_num' => $file_length, 'add_time' => time(), 'is_user' => 1, 'is_show' => '1', ]; } else { if(!in_array($cate_id,$cate_arr)) { $fc_add_time = M('fangchan')->where(['fangchan_id' => $fangchan_id])->getField('add_time'); //获取添加时间 if ((time() - $fc_add_time) < (12 * 60 * 60)) { $arr = ['status' => '1006', 'msg' => '请于24小时候后来发布!', 'data' => '']; $this->ajaxReturn($arr, 'json'); } } $data = [ 'fangchan_id' => $fangchan_id, 'user_id' => $user_id, 'cate_id' => $cate_id, 'content' => $content, 'res_num' => $file_length, 'add_time' => time(), 'is_user' => 0, 'is_show' => '1', ]; } if($guanxi=='many_one') { $fc_jindiao_data = M('fangchan_jindiao') ->where(['fangchan_id'=>$fangchan_id,'user_id'=>$user_id,'cate_id'=>$cate_id]) ->getField('jindiao_id'); //判断房产尽调是修改还是添加 if($fc_jindiao_data){ $res_edit = M('fangchan_jindiao')->where('jindiao_id='.$fc_jindiao_data)->save($data); }else{ $res_add = M('fangchan_jindiao')->add($data); } }elseif($guanxi=='one_one') { $fc_jindiao_data = M('fangchan_jindiao') ->where(['fangchan_id'=>$fangchan_id,'cate_id'=>$cate_id]) ->getField('jindiao_id'); //判断房产尽调是修改还是添加 if($fc_jindiao_data){ $res_edit = M('fangchan_jindiao')->where('jindiao_id='.$fc_jindiao_data)->save($data); }else{ $res_add = M('fangchan_jindiao')->add($data); } }elseif($guanxi=='many_many') { $res_add = M('fangchan_jindiao')->add($data); } //判断是否有文件 if(!empty($file_length) || $file_length!=0) { $result = self::uploadFile($type_file); if($result['status'] == -1){ exit(json_encode(array("status"=>-1,"msg"=>$result['msg'],'result'=>''))); } $add_time = time(); if(!empty($res_edit)) { $where=array('user_id' => $user_id,'fangchan_id' => $fangchan_id,'cate_id'=> $cate_id); $r_info = M('fangchan_jindiao')->where($where) ->getField('jindiao_id'); if($r_info) { foreach ($result['result'] as $v) { if($type_file=='file') { $data=array('user_id' => $user_id,'fangchan_id' => $fangchan_id,'cate_id'=> $cate_id,'add_time'=> $add_time,'jindiao_id'=> $r_info,'file'=>$v); $ziyuan_info = M("fangchan_jdresources")->data($data)->add(); }elseif($type_file=='image') { $data=array('user_id' => $user_id,'fangchan_id' => $fangchan_id,'cate_id'=> $cate_id,'add_time'=> $add_time,'jindiao_id'=> $r_info,'images'=>$v); $ziyuan_info = M("fangchan_jdresources")->data($data)->add(); } } if($ziyuan_info) { $ret =[ 'status'=>200, 'msg'=>'上传成功', 'data'=> $data ]; }else{ $ret =[ 'status'=>1009, 'msg'=>'上传资源失败', 'data'=> '' ]; } }else{ $ret =[ 'status'=>1008, 'msg'=>'上传资源失败', 'data'=> '' ]; } }elseif(!empty($res_add)) { foreach ($result['result'] as $v) { if($type_file=='file') { $data=array('user_id' => $user_id,'fangchan_id' => $fangchan_id,'cate_id'=> $cate_id,'add_time'=> $add_time,'jindiao_id'=> $res_add,'file'=>$v); $ziyuan_info = M("fangchan_jdresources")->data($data)->add(); }elseif($type_file=='image') { $data=array('user_id' => $user_id,'fangchan_id' => $fangchan_id,'cate_id'=> $cate_id,'add_time'=> $add_time,'jindiao_id'=> $res_add,'images'=>$v); $ziyuan_info = M("fangchan_jdresources")->data($data)->add(); } } if($ziyuan_info) { $ret =[ 'status'=>200, 'msg'=>'上传成功', 'data'=> $data ]; }else{ $ret =[ 'status'=>1010, 'msg'=>'上传资源失败', 'data'=> '' ]; } }else{ $ret =[ 'status'=>1011, 'msg'=>'上传资源失败', 'data'=> '' ]; } }elseif(empty($res_add) && empty($res_edit)){ $ret =[ 'status'=>1007, 'msg'=>'上传失败', 'data'=> '' ]; }else{ $ret =[ 'status'=>200, 'msg'=>'上传成功', 'data'=> '' ]; } $this->ajaxReturn($ret); } /* *多图上传 */ public function uploadFile($type='file'){ if($type=='file') { $type_info = array('doc', 'docx', 'xls', 'xlsx','zip','rar'); $type_path = '/Public/upload/jidiao/files/'; }elseif($type=='image'){ $type_info = array('jpg', 'gif', 'png', 'jpeg'); $type_path = '/Public/upload/jidiao/images/'; } $upload = new \Think\Upload();// 实例化上传类 $upload->maxSize = 1 * 1024 * 1024;// 设置附件上传大小 $upload->exts = $type_info;// 设置附件上传类型 $upload->rootPath = '.'.$type_path; // 设置附件上传根目录 $upload->savePath = ''; // 设置附件上传(子)目录 $upload->subName = array('date','Y/m-d'); //上传文件 $info = $upload->upload(); $picurl = array(); if(!$info) {// 上传错误提示错误信息 return array('status'=>-1,'msg'=>$upload->getError(),'result'=>''); }else{// 上传成功 获取上传文件信息 foreach($info as $file){ $picurl[] = $type_path.$file['savepath'].$file['savename']; } return array("status"=>1,"msg"=>'上传成功','result'=>$picurl); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
################################################ ###以上是thinkphp 下多圖ajax上傳圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHPSession失效的原因包括配置錯誤、Cookie問題和Session過期。 1.配置錯誤:檢查並設置正確的session.save_path。 2.Cookie問題:確保Cookie設置正確。 3.Session過期:調整session.gc_maxlifetime值以延長會話時間。

在PHP中調試會話問題的方法包括:1.檢查會話是否正確啟動;2.驗證會話ID的傳遞;3.檢查會話數據的存儲和讀取;4.查看服務器配置。通過輸出會話ID和數據、查看會話文件內容等方法,可以有效診斷和解決會話相關的問題。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

在PHP中配置會話生命週期可以通過設置session.gc_maxlifetime和session.cookie_lifetime來實現。 1)session.gc_maxlifetime控制服務器端會話數據的存活時間,2)session.cookie_lifetime控制客戶端cookie的生命週期,設置為0時cookie在瀏覽器關閉時過期。

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中