この記事では主に圧縮画像の非同期アップロードを実装し、画像をすぐに表示するための JS を紹介します。興味のある方は参考にしてください。多かれ少なかれ少し遅れています! AJAXとJSだけを使って画像を非同期アップロードすることはできないのでしょうか?
この JS ライブラリについては think2011 に感謝します: github.com/think2011/LocalResizeIMG
まず呼び出しページを見てください:
<!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 クラス ライブラリをロードする必要があります:
2. 次に、画像の処理と非同期送信用の JS を準備します。画像。
<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を使用することをお勧めします 画像が復元されない場合は、データに問題がある可能性があります。画像コードを投稿して見てください。
js を学習する必要がある学生は、php 中国語 Web サイトに注意してください
js ビデオ チュートリアル、多くの js オンライン ビデオ チュートリアルを無料で視聴できます。
以上がJSを使用して圧縮画像の非同期アップロードを実現する1つのトリックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。