這篇文章主要為大家詳細介紹了JS實現異步上傳壓縮圖片,並立即顯示圖片,具有一定的參考價值,有興趣的小伙伴們可以參考一下
##摘要: 使用iframe來處理非同步上傳圖片,在現在這個時代來說,多多少少都有點落後了!單單就憑AJAX和JS就不能做到非同步上傳圖片了嗎?<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no"> <script type="text/javascript" src="./js/lrz.mobile.min.js"></script> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> </head> <body class="upload"> <form id="form"> <p id="img_show"></p> <p id="upload"> <p id="img_file"><input type="file" accept="image/*" ><p class="btn">选择图片</p></p> </p> <input type="submit" class="tijiao" value="提交"> </form> </body> <script type="text/javascript"> var img; $("input:file").change(function (){ //console.log(this.files[0]); lrz(this.files[0],{width:640,quality:0.9},function(rst){ img = rst.base64; var html = []; var show_img = new Image(); show_img.src = rst.base64; $("#img_show").html("<p class='upimg'></p>"); $(".upimg").html(show_img); }); }); $("#form").submit(function (){ var phone = $("input[name='phone']").val(); var month = $("input[name='month']").val(); $.post("upload.php",{img:img,phone:phone,month:month},function(data){ img = null; alert(data.msg); },'json'); return false; }); </script> </html>1.首先你要載入JS類別庫:
343d850cbb57dc7eab4662bb2c8e888b2cacc6d41bbb37262a98f745aa00fbf0
<script type="text/javascript"> var img; $("input:file").change(function (){ //console.log(this.files[0]); lrz(this.files[0],{width:640,quality:0.9},function(rst){ img = rst.base64; var html = []; var show_img = new Image(); show_img.src = rst.base64; $("#img_show").html("<p class='upimg'></p>"); $(".upimg").html(show_img); }); }); $("#form").submit(function (){ var phone = $("input[name='phone']").val(); var month = $("input[name='month']").val(); $.post("upload.php",{img:img},function(data){ img = null; alert(data.msg); },'json'); return false; }); </script>從程式碼可以看出,這個JS函式庫是把圖片轉成碼,然後用變數存起來,然後在用非同步POST到伺服器中在處理。 看起來似乎沒有什麼特別的地方,的確實在也沒有什麼特別的地方.......#後台處理程序PHP:
function error($msg=''){ $return = array('msg'=>$msg); echo json_encode($return); exit(); } function main(){ if(!$_POST['img']){ error('请上传图片!'); } $img = $_POST['img']; $path = './upload/'; $type_limit = array('jpg','jpeg','png'); if(preg_match('/data:\s*image\/(\w+);base64,/iu',$img,$tmp)){ if(!in_array($tmp[1],$type_limit)){ error('图片格式不正确,只支持jpg,jpeg,png!'); } }else{ error('抱歉!上传失败,请重新再试!'); } $img = str_replace(' ','+',$img); $img = str_replace($tmp[0], '', $img); $img = base64_decode($img); $file = $path.time().'.'.$tmp[1]; if(!file_put_contents($file,$img)){ error('上传图片失败!'); }else{ error('恭喜您!上传成功!'); } } main();上述程式碼如果有錯誤歡迎指出。 如上訴代碼,正如你看到的那樣,經過BASE64加密過的圖片碼經過JS非同步的POST過來後端後,我們要把程式碼還原。但是JS函式庫加密的時候會帶有一些標籤,所以還原前要先處理掉這些本來不屬於圖片的東西。
$img = str_replace(' ','+',$img); $img = str_replace($tmp[0], '', $img); $img = base64_decode($img);最後把程式碼塞進文件,設定好對應的檔案名稱和副檔名,圖片就成功上傳到了伺服器了。
注意:
前後端包含JS編碼要一致,建議UTF-8如果圖片還原不會來的話,那肯定是數據問題,列印POST過來的圖片碼出來看看。 需要學習js的同學請關注php中文網js影片教學,眾多js線上影片教學可以免費觀看!
以上是一招搞定JS實現異步上傳壓縮圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!