由於前段時間的項目中 涉及到圖紙的上傳 前端大神很隨意的扔給我一個頁面 讓我自己修修改改 找了好幾個素材站都沒有找到合適的上傳插件 最后不得已 用formdata 寫了一個 順便記錄下吧
html 代碼
<li> <label class="left">上傳產品圖片:</label> <div class="formlisttext" id="feedback"> <a onClick="getElementById('inputfile').click()" class="addpic"><b>+</b><br />添加圖片</a> <input type="file" onchange=checkImgExt(this.value) multiple="multiple" name="image" id="inputfile" style="height:0;width:0;z-index: -1; position: absolute;left: 10px;top: 5px;"/> <small class="long">支持jpeg、jpg、gif、png等圖片格式,單張圖片最大不超過8M。</small> </div> </li>
js 代碼
$("#inputfile").change(function(){ //創建FormData對象 var data = new FormData(); //為FormData對象添加數據 $.each($('#inputfile')[0].files, function(i, file) { data.append('upload_file'+i, file); }); //發送數據 $.ajax({ url:'url', //地址自己寫啊 type:'POST', data:data, cache: false, contentType: false, //不可缺參數 processData: false, //不可缺參數 success:function(data){ data = $(data).html(); //第一個feedback數據直接append,其他的用before第1個( .eq(0).before() )放至最前面。 //data.replace(/</g,'<').replace(/>/g,'>') 轉換html標簽,否則圖片無法顯示。 if($("#feedback").children('img').length == 0) $("#feedback").prepend(data.replace(/</g,'<').replace(/>/g,'>')); else $("#feedback").children('img').eq(0).before(data.replace(/</g,'<').replace(/>/g,'>')); $(".loading").hide(); //加載成功移除加載圖片 }, error:function(err){ // alert('上傳出錯'); // $(".loading").show(); //加載失敗移除加載圖片 } }); });
php 代碼
1 function img(){ 2 $db = $GLOBALS['db']; 3 $ecs = $GLOBALS['ecs']; 4 5 $dir_base = DATA_DIR . '/product_img/' . date('Ymd') . '/'; 6 if (!file_exists($dir_base)) { 7 if (!@mkdir($dir_base, 0755,true)) { 8 return false; 9 } 10 } 11 //沒有成功上傳文件,報錯並退出。 12 if(empty($_FILES)) { 13 echo "<textarea><img src='{$dir_base}error.jpg'/></textarea>"; 14 exit(0); 15 } 16 17 $output = "<textarea>"; 18 $index = 0; //$_FILES 以文件name為數組下標,不適用foreach($_FILES as $index=>$file) 19 foreach($_FILES as $file){ 20 $upload_file_name = 'upload_file' . $index; //對應index.html FomData中的文件命名 21 $fix = substr(strrchr($_FILES[$upload_file_name]['name'], '.'), 1); 22 $filename = base64_encode("product_img_62_48".date('YmdHis')."_".rand(1000,9999)).".".$fix; 23 $gb_filename = iconv('utf-8','gb2312',$filename); //名字轉換成gb2312處理 24 //文件不存在才上傳 25 if(!file_exists($dir_base.$gb_filename)) { 26 $isMoved = false; //默認 27 $MAXIMUM_FILESIZE = 8 * 1024 * 1024; //文件大小限制 8M = 8 * 1024 * 1024 B; 28 $rEFileTypes = "/^\.(jpg|jpeg|gif|png){1}$/i"; //取文件后綴 29 30 if ($_FILES[$upload_file_name]['size'] <= $MAXIMUM_FILESIZE && preg_match($rEFileTypes, strrchr($gb_filename, '.'))) { 32 $isMoved = @move_uploaded_file ( $_FILES[$upload_file_name]['tmp_name'], $dir_base.$gb_filename); //上傳文件 33 } 34 }else{ 35 $isMoved = true; //已存在文件設置為上傳成功 36 } 37 if($isMoved){ 38 $sql = 'INSERT INTO'.$ecs->table('goods_img').'(`img_path`) VALUES '."('$dir_base$filename')"; 39 $db->query($sql); 40 $img_id = $db->insert_id(); 41 //輸出圖片文件<img>標簽 42 //注:在一些系統src可能需要urlencode處理,發現圖片無法顯示, 43 // 請嘗試 urlencode($gb_filename) 或 urlencode($filename),不行請查看HTML中顯示的src並酌情解決。 44 $output .= "<div class='thumblist' id='imageDelete{$img_id}' >"; 45 $output .= "<div class='thumboperate'>"; 46 // $output .= "<a href='' class='replace'></a>"; 47 $output .= "<a href='' onclick='imgdelete({$img_id});return false;' class='delete'></a>"; 48 $output .= "</div>"; 49 $output .= "<input type='hidden' name='imagepath[]' value='{$img_id}'>"; 50 $output .= "<img src='{$dir_base}{$filename}' title='{$filename}' alt='{$filename}' style='width: 62px;height: 48px;'/>"; 51 $output .= "</div>"; 52 }else { 53 $output .= "<div class='thumblist' >"; 54 $output .= "<div class='thumboperate'>"; 55 // $output .= "<a href='' class='replace'></a>"; 56 $output .= "<a href='' class='delete'></a>"; 57 $output .= "</div>"; 58 $output .= "<input type='hidden' name='imagepath[]' value='{$dir_base}{$filename}'>"; 59 $output .= "<img src='{$dir_base}error.jpg' title='{$filename}' alt='{$filename}' style='width: 62px;height: 48px;'/>"; 60 $output .= "</div>"; 61 } 62 63 $index++; 64 } 65 66 echo $output."</textarea>"; 67 }
由於本人比較懶,細節方面就不調了
驗證方法附上
1 function checkImgExt(filename) 2 { 3 var flag = false; //狀態 "jpg","png","jpeg","gif" 4 var arr = ["jpg","png","jpeg","gif"]; 5 //取出上傳文件的擴展名 6 var index = filename.lastIndexOf("."); 7 var ext = filename.substr(index+1).toLowerCase( ); 8 //循環比較 9 for(var i=0;i<arr.length;i++) 10 { 11 if(ext == arr[i]) 12 { 13 flag = true; //一旦找到合適的,立即退出循環 14 break; 15 } 16 } 17 //條件判斷 18 if(!flag) 19 { 20 alert('你上傳的圖片類型不正確'); 21 // $("#Model").val(''); 22 return false; 23 } 24 };
