使用html5 FileReader获取图片,并异步上传到server(不使用iframe)

使用html5 FileReader获取图片,并异步上传到server(不使用iframe)


原理:

1.使用FileReader 读取图片的base64编码

2.使用ajax。把图片的base64编码post到server。

3.依据接收到post的数据分析图片的类型(jpg,gif,png)。并把base64_decode后的数据生成相应类型的图片文件。


html:

<!DOCTYPE HTML PUBLIC>
<html>
 <head>
  <meta charset="utf-8">
  <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
  <title>使用html5 FileReader获取图片。并异步上传到server(not iframe)</title>

  <style type="text/css">
    body{margin: 0px; background:#f2f2f0;}
    p{margin:0px;}
    .title{color:#FFFF00; background:#000000; text-align:center; font-size:24px; line-height:50px; font-weight:bold;}
    .file{position:absolute; 100%; font-size:90px;}
    .filebtn{display:block; position:relative; height:110px; color:#FFFFFF; background:#06980e; font-size:48px; line-height:110px; text-align:center; cursor:pointer; border: 3px solid #cccccc;}
    .filebtn:hover{background:#04bc0d;}
    .showimg{margin:10px auto 10px auto; text-align:center;}
  </style>

  <script type="text/javascript">
  window.onload = function(){

    // 选择图片
    document.getElementById('img').onchange = function(){

        var img = event.target.files[0];

        // 推断是否图片
        if(!img){
            return ;
        }

        // 推断图片格式
        if(!(img.type.indexOf('image')==0 && img.type && /.(?:jpg|png|gif)$/.test(img.name)) ){
            alert('图片仅仅能是jpg,gif,png');
            return ;
        }

        var reader = new FileReader();
        reader.readAsDataURL(img);

        reader.onload = function(e){ // reader onload start
            // ajax 上传图片
            $.post("server.php", { img: e.target.result},function(ret){
                if(ret.img!=''){
                    alert('upload success');
                    $('#showimg').html('<img src="' + ret.img + '">');
                }else{
                    alert('upload fail');
                }
            },'json');
        } // reader onload end
    }

  }
  </script>

 </head>

 <body>
  <p class="title">使用html5 FileReader获取图片,并异步上传到server(not iframe)</p>
  <p><input type="file" class="file" id="img"><label class="filebtn" for="img" title="JPG,GIF,PNG">请选择图片</label></p>
  <p class="showimg" id="showimg"></p>
 </body>  
</html>

server.php

<?

php $img = isset($_POST['img'])? $_POST['img'] : ''; // 获取图片 list($type, $data) = explode(',', $img); // 推断类型 if(strstr($type,'image/jpeg')!=''){ $ext = '.jpg'; }elseif(strstr($type,'image/gif')!=''){ $ext = '.gif'; }elseif(strstr($type,'image/png')!=''){ $ext = '.png'; } // 生成的文件名称 $photo = time().$ext; // 生成文件 file_put_contents($photo, base64_decode($data), true); // 返回 header('content-type:application/json;charset=utf-8'); $ret = array('img'=>$photo); echo json_encode($ret); ?>


原文地址:https://www.cnblogs.com/wzzkaifa/p/6952685.html