移動端壓縮並ajax上傳圖片解決方案


1.需求

做一個前端可壓縮並且上傳圖片到后台的功能

2.使用組件

用到的主要是jq和LocalResizeIMG這2個庫

3.使用方法

a.引入腳本文件

<script type='text/javascript' src='js/jquery-2.0.3.min.js'></script>
<script type='text/javascript' src='js/LocalResizeIMG.js'></script>
<script type='text/javascript' src='js/patch/mobileBUGFix.mini.js'></script>

b.編寫html

<div style="width:100%;margin:10px auto; border:solid 1px #ddd; overflow:hidden; ">
  <input type="file" id="uploadphoto" name="uploadfile" value="請點擊上傳圖片"   style="display:none;" /> 
  <div class="imglist"></div> 
  <a href="javascript:void(0);" onclick="uploadphoto.click()" class="uploadbtn">點擊上傳文件</a>
</div>

c.編寫css

body{font-family:"微軟雅黑"}
*{margin: 0;padding: 0;    }
.uploadbtn{ display:block;height:40px; line-height:40px; color:#333; text-align:center; width:100%; background:#f2f2f2; text-decoration:none; }
.imglist{min-height:200px;margin:10px;}
.imglist img{width:100%;}

d.執行上傳代碼

<script type="text/javascript">
$(document).ready(function(e) {
   $('#uploadphoto').localResizeIMG({
      //要壓縮到的寬度
      width: 1900,
      quality: 1,
      success: function (result) { 
      // result.clearBase64是base64的數據
          var submitData={
                base64_string:result.clearBase64, 
            }; 

        $.ajax({
           type: "POST",
           url: "upload.php",
           data: submitData,
           dataType:"json",
           success: function(data){
             if (0 == data.status)
             {
                alert(data.content);
                return false;
             }
             else
             {
                alert(data.content);
                var attstr= '<img id='+'element_id'+' src="'+data.url+'">'; 
                $(".imglist").append(attstr);
                return false;
             }
           }, 
            complete :function(XMLHttpRequest, textStatus){
            },
            error:function(XMLHttpRequest, textStatus, errorThrown){ //上傳失敗 
               alert(XMLHttpRequest.status);
               alert(XMLHttpRequest.readyState);
               alert(textStatus);
            }
        }); 
      }
  });
}); 
</script>

e.后端php接收數據並處理。

后端會接收前端的base64數據,並base64解碼保存在images文件夾下面

<?php
 
    $base64_string = $_POST['base64_string'];

    $savename = uniqid().'.jpeg';//localResizeIMG壓縮后的圖片都是jpeg格式

    $savepath = 'images/'.$savename; 

    $image = base64_to_img( $base64_string, $savepath );

    if($image){
        echo '{"status":1,"content":"圖片上傳成功,請用手指輕觸要做為頭像的區域","url":"'.$image.'"}';
    }else{
        echo '{"status":0,"content":"上傳失敗"}';
    } 

    function base64_to_img( $base64_string, $output_file ) {
        $ifp = fopen( $output_file, "wb" ); 
        fwrite( $ifp, base64_decode( $base64_string) ); 
        fclose( $ifp ); 
        return( $output_file ); 
    } 
?>

 

4.總結

思路就是前端把圖片base64編碼,再傳到后台進行base64解碼並保存把圖片返回給客戶端並在服務端保存一份。(需在服務器下運行代碼)

 

參考資料:http://www.cnblogs.com/manongxiaobing/p/4720568.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM