最新消息: 新版网站上线了!!!

html5 手机端异步上传预览图片(文件) FileReader对象

<p>一、以前web页面上传以及展示图片原理说明

        1.    form表单选择图片 ——> 通过php上传存储在服务器端 ——> 服务器返回图片的url给前端页面 ——> 通过url前台展示图片(预览)

        2.    如果预览之后不满意,就按照上面的流程重新上传修改预览


二、html5出现之后使用javascript实现FileReade接口

        说明:在html5范围之内,通过FileReade接口可以直接先预览图片,然后通过php上传存储在服务器

        FileReader接口原理: 通过FileReader,可以异步地将本地图片文件加载到本地内存,然后赋予某个javascript变量。然后调用FileReader的readAsDataURL方法,通过将图片数据读取成Data URL的方法,将图片展示出来。

        html5中:

        1.    通过一个file input选择一个图片文件例如:<input type="file" id="file_input" />

         

        javascript中:

        1.    获取file对象var file = this.files[0];

        2.    判读文件类型是否图片file.type

        3.    实例化FileReader      var reader = new FileReader();

        4.    readAsDataURL方法读取图像文件  reader.readerAsDataURL(file);

        5.    通过this.result输出到显示位置:result.innerHTML = '<img src="'+this.result+'" alt=""/>'

    

    上面把大概的流程梳理了一下让大家有个基本概念,具体使用时可能还要配合一些js事件比如:onload事件等


三、实例

    下面代码已经测试没问题,如果自己使用出现问题就注意一下路劲等参数

    测试环境:goole chrome、微信、android浏览器、iphone浏览器

   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获取图片,并异步上传到服务器(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; width: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获取图片,并异步上传到服务器(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>



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);
?>


转载请注明:谷谷点程序 » html5 手机端异步上传预览图片(文件) FileReader对象