使用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. ?>

使用html5 FileReader获取图片,并异步上传到服务器(不使用iframe)的更多相关文章

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

    为什么80%的码农都做不了架构师?>>>   原理: 1.使用FileReader 读取图片的base64编码 2.使用ajax,把图片的base64编码post到服务器. 3.根据 ...

  2. HTML5预览图片、异步上传文件

    注意啦:本文的代码都是以JQuery为示例,jq_开头的变量都是jq对象. 在HTML5中,我们可以在图片上传之前对图片进行预览,就像下面这么做 jq_upload_file.change(funct ...

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

    使用html5 FileReader获取图片,并异步上传到server(不使用iframe) 原理: 1.使用FileReader 读取图片的base64编码 2.使用ajax.把图片的base64编 ...

  4. HTML5实现图片文件异步上传

    原文:HTML5实现图片文件异步上传 利用HTML5的新特点做文件异步上传非常简单方便,本文主要展示JS部分,html结构.下面的代码并未使用第三发库,如果有参照,请注意一些未展现出来的代码片段.我这 ...

  5. 使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器

    使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器 ajax上传主要使用了 var reader = new FileReader() 此方法 js图片压缩主要是利用canvas进 ...

  6. JSP+SpringMVC框架使用WebUploader插件实现注册时候头像图片的异步上传功能

    一.去官网下载webuploader文件上传插件 https://fex.baidu.com/webuploader/ 下载好后把它放到Javaweb项目的文件夹中(我放到了webcontent下面的 ...

  7. HTML5 文件域+FileReader 分段读取文件并上传到服务器(六)

    说明:使用Ajax方式上传,文件不能过大,最好小于三四百兆,因为过多的连续Ajax请求会使后台崩溃,获取InputStream中数据会为空,尤其在Google浏览器测试过程中. 1.简单分段读取文件为 ...

  8. 【Web】前端裁剪图片,并上传到服务器(Jcrop+canvas)

    web网站中常常有的功能:上传头像.上传封面等:一般图片都有一定的比例限制,所以需要前端在上传图片时,进行裁剪,并把裁剪后的图片进行上传. 本例采用Jcrop插件实现裁剪效果,canvas裁剪图片,并 ...

  9. 百度 flash html5自切换 多文件异步上传控件webuploader基本用法

    双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name=& ...

随机推荐

  1. Mini ORM——PetaPoco笔记(转)

    记录一下petapoco官网博客的一些要点.这些博客记录了PetaPoco是如何一步步改进的. 目录: Announcing PetaPoco PetaPoco-Improvements PetaPo ...

  2. EntityFramework系列:SQLite.CodeFirst自动生成数据库

    http://www.cnblogs.com/easygame/p/4447457.html 在Code First模式下使用SQLite一直存在不能自动生成数据库的问题,使用SQL Server C ...

  3. MySQL 视图的基础操作(五)

    1.为什么使用视图:     为了提高复杂SQL语句的复用性和表操作的安全性(例如:工资字段不想展示给所有能查看该查询结果的人),MySQL提供了视图特性.所谓视图,本质上是一种虚拟表,其内容与真实的 ...

  4. java 运行指定类的main函数

    运行jar文件的方法是: java -jar xxx.jar 但是有时,我们希望运行里面的具体某个类,这时可以通过: java -cp xxx.jar xxx.com.xxxx  它会找到这个类的ma ...

  5. maven 入门

    Apache Maven 入门篇 ( 上 ) 作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这 ...

  6. aop测试jdk代理机制

    //测试jdk代理机制 @Test public void testProxy(){ final UsbDisk usbDisk = new UsbDisk(); //类加载器,接口,匿名内部类 // ...

  7. C# Thread挂起线程和恢复线程

    前言 众所周知,Thread类中的挂起线程和恢复线程微软已标记过时,因为可能会造成问题   Resume()   恢复当前线程 已过时. Resumes a thread that has been ...

  8. js日期格式化函数

    /** * @author ocq * * 对Date的扩展,将 Date 转化为指定格式的String * 月(M).日(d).12小时(h).24小时(H).分(m).秒(s).周(E).季度(q ...

  9. linux 文件操作和权限

    1.touch 创建文件 2.查看文件cat 浏览一个较短文件,行号加上cat -n 3.反向显示内容tac 并不支持-n选项 4.分页显示文件内容more  空格或f 翻页  回车换行  q或者Q退 ...

  10. linux安装软件通常会做哪些事

    一般来说,安装某个包,某个服务,某个软件时,可能会做以下事情(不一定全部) - 在安装目录: /usr/bin, /usr/lib: /usr/you_specified_bin/, /usr/you ...