이 글에서는 압축된 이미지의 비동기 업로드와 이미지의 즉각적인 표시를 구현하는 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 클래스 라이브러리를 입력하세요:
343d850cbb57dc7eab4662bb2c8e888b2cacc6d41bbb37262a98f745aa00fbf0
2. 그런 다음 양식을 작성합니다
3. 이미지 처리 및 이미지 비동기 제출을 위한 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를 통해 백엔드에 비동기적으로 게시된 후 코드를 복원해야 합니다. 하지만 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!