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

评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

html5拖拽实现