>웹 프론트엔드 >JS 튜토리얼 >JS를 사용하여 압축된 이미지의 비동기 업로드를 달성하는 한 가지 트릭

JS를 사용하여 압축된 이미지의 비동기 업로드를 달성하는 한 가지 트릭

零下一度
零下一度원래의
2017-04-25 10:45:021611검색

이 글에서는 압축된 이미지의 비동기 업로드와 이미지의 즉각적인 표시를 구현하는 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=&#39;upimg&#39;></p>");
      $(".upimg").html(show_img);
    });
  });
  $("#form").submit(function (){
    var phone = $("input[name=&#39;phone&#39;]").val();
    var month = $("input[name=&#39;month&#39;]").val();
    $.post("upload.php",{img:img,phone:phone,month:month},function(data){
      img = null;
      alert(data.msg);
    },&#39;json&#39;);
    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=&#39;upimg&#39;></p>");
      $(".upimg").html(show_img);
    });
  });
  $("#form").submit(function (){
    var phone = $("input[name=&#39;phone&#39;]").val();
    var month = $("input[name=&#39;month&#39;]").val();
    $.post("upload.php",{img:img},function(data){
      img = null;
      alert(data.msg);
    },&#39;json&#39;);
    return false;
  });
</script>

코드에서 볼 수 있듯이 이 JS 라이브러리는 이미지를 코드로 변환한 후 변수에 저장한 다음 비동기 POST를 사용하여 서버에 처리합니다.

특별한 게 없는 것 같고, 사실 별거 없는 것 같은데...

백그라운드 처리 프로그램 PHP:

function error($msg=&#39;&#39;){
  $return = array(&#39;msg&#39;=>$msg);
  echo json_encode($return);
  exit();
}

function main(){
  if(!$_POST[&#39;img&#39;]){
    error(&#39;请上传图片!&#39;);
  }
  $img = $_POST[&#39;img&#39;];
  $path = &#39;./upload/&#39;;
  $type_limit = array(&#39;jpg&#39;,&#39;jpeg&#39;,&#39;png&#39;);
  if(preg_match(&#39;/data:\s*image\/(\w+);base64,/iu&#39;,$img,$tmp)){
    if(!in_array($tmp[1],$type_limit)){
      error(&#39;图片格式不正确,只支持jpg,jpeg,png!&#39;);
    }
  }else{
    error(&#39;抱歉!上传失败,请重新再试!&#39;);
  }
  
  $img = str_replace(&#39; &#39;,&#39;+&#39;,$img);
  
  $img = str_replace($tmp[0], &#39;&#39;, $img);

  $img = base64_decode($img);
  
  $file = $path.time().&#39;.&#39;.$tmp[1];
  if(!file_put_contents($file,$img)){
    error(&#39;上传图片失败!&#39;);
  }else{
    error(&#39;恭喜您!上传成功!&#39;);
  }
}
main();

위 오류가 있는 경우 코드에서 이를 지적해주세요.

항소 코드에서 볼 수 있듯이 BASE64로 암호화된 이미지 코드가 JS를 통해 백엔드에 비동기적으로 게시된 후 코드를 복원해야 합니다. 하지만 JS 라이브러리에는 암호화 시 일부 태그가 포함되므로 원래 이미지가 아닌 것들은 복원하기 전에 처리해야 합니다.

$img = str_replace(&#39; &#39;,&#39;+&#39;,$img);  
$img = str_replace($tmp[0], &#39;&#39;, $img);
$img = base64_decode($img);

마지막으로 파일에 코드를 삽입하고 해당 파일명과 확장자를 설정하면 이미지가 서버에 성공적으로 업로드됩니다.

참고:

JS 인코딩을 포함한 프런트엔드와 백엔드가 일관되어야 합니다. UTF-8을 권장합니다

이미지 복원이 안 되네요. 데이터 문제가 있는 것 같습니다. POST에서 이미지 코드를 인쇄하여 살펴보세요.

js를 배워야 하는 학생들은 PHP 중국어 웹사이트 js 비디오 튜토리얼에 주목하세요. 많은 js 온라인 비디오 튜토리얼을 무료로 시청할 수 있습니다!

위 내용은 JS를 사용하여 압축된 이미지의 비동기 업로드를 달성하는 한 가지 트릭의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.