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

 

原理:

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

2.使用ajax,把图片的base64编码post到服务器。

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

html:

  1. <!DOCTYPE HTML PUBLIC>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
  6. <title>使用html5 FileReader获取图片,并异步上传到服务器(not iframe)</title>
  7. <style type="text/css">
  8. body{margin: 0px; background:#f2f2f0;}
  9. p{margin:0px;}
  10. .title{color:#FFFF00; background:#000000; text-align:center; font-size:24px; line-height:50px; font-weight:bold;}
  11. .file{position:absolute; width:100%; font-size:90px;}
  12. .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;}
  13. .filebtn:hover{background:#04bc0d;}
  14. .showimg{margin:10px auto 10px auto; text-align:center;}
  15. </style>
  16. <script type="text/javascript">
  17. window.onload = function(){
  18. // 选择图片
  19. document.getElementById('img').onchange = function(){
  20. var img = event.target.files[0];
  21. // 判断是否图片
  22. if(!img){
  23. return ;
  24. }
  25. // 判断图片格式
  26. if(!(img.type.indexOf('image')==0 && img.type && /\.(?:jpg|png|gif)$/.test(img.name)) ){
  27. alert('图片只能是jpg,gif,png');
  28. return ;
  29. }
  30. var reader = new FileReader();
  31. reader.readAsDataURL(img);
  32. reader.onload = function(e){ // reader onload start
  33. // ajax 上传图片
  34. $.post("server.php", { img: e.target.result},function(ret){
  35. if(ret.img!=''){
  36. alert('upload success');
  37. $('#showimg').html('<img src="' + ret.img + '">');
  38. }else{
  39. alert('upload fail');
  40. }
  41. },'json');
  42. } // reader onload end
  43. }
  44. }
  45. </script>
  46. </head>
  47. <body>
  48. <p class="title">使用html5 FileReader获取图片,并异步上传到服务器(not iframe)</p>
  49. <p><input type="file" class="file" id="img"><label class="filebtn" for="img" title="JPG,GIF,PNG">请选择图片</label></p>
  50. <p class="showimg" id="showimg"></p>
  51. </body>
  52. </html>

server.php

  1. <?php
  2. $img = isset($_POST['img'])? $_POST['img'] : '';
  3. // 获取图片
  4. list($type, $data) = explode(',', $img);
  5. // 判断类型
  6. if(strstr($type,'image/jpeg')!==''){
  7. $ext = '.jpg';
  8. }elseif(strstr($type,'image/gif')!==''){
  9. $ext = '.gif';
  10. }elseif(strstr($type,'image/png')!==''){
  11. $ext = '.png';
  12. }
  13. // 生成的文件名
  14. $photo = time().$ext;
  15. // 生成文件
  16. file_put_contents($photo, base64_decode($data), true);
  17. // 返回
  18. header('content-type:application/json;charset=utf-8');
  19. $ret = array('img'=>$photo);
  20. echo json_encode($ret);
  21. ?>