JSを使用して圧縮画像の非同期アップロードを実現する1つのトリック

零下一度
リリース: 2017-04-25 10:45:02
オリジナル
1586 人が閲覧しました

この記事では主に圧縮画像の非同期アップロードを実装し、画像をすぐに表示するための 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 クラス ライブラリをロードする必要があります:


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=&#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 経由でバックエンドに非同期的に POST された後、コードを復元する必要があります。ただし、JSライブラリは暗号化するとタグが付いてしまいますので、元の画像ではないものは復元前に処理する必要があります。

$img = str_replace(&#39; &#39;,&#39;+&#39;,$img);  
$img = str_replace($tmp[0], &#39;&#39;, $img);
$img = base64_decode($img);
ログイン後にコピー

最後に、コードをファイルに挿入し、対応するファイル名と拡張子を設定すると、画像がサーバーに正常にアップロードされます。

注:

JSエンコーディングを含むフロントエンドとバックエンドは一貫している必要があります。UTF-8を使用することをお勧めします 画像が復元されない場合は、データに問題がある可能性があります。画像コードを投稿して見てください。

js を学習する必要がある学生は、php 中国語 Web サイトに注意してください

js ビデオ チュートリアル

、多くの js オンライン ビデオ チュートリアルを無料で視聴できます。

以上がJSを使用して圧縮画像の非同期アップロードを実現する1つのトリックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート