使用html5 FileReader获取图片,并异步上传到服务器(不使用iframe)
使用html5 FileReader获取图片,并异步上传到服务器(不使用iframe)
原理:
1.使用FileReader 读取图片的base64编码
2.使用ajax,把图片的base64编码post到服务器。
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获取图片,并异步上传到服务器(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>
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);
- ?>
使用html5 FileReader获取图片,并异步上传到服务器(不使用iframe)的更多相关文章
- 使用 html5 FileReader 获取图片, 并异步上传到服务器 (不使用 iframe)
为什么80%的码农都做不了架构师?>>> 原理: 1.使用FileReader 读取图片的base64编码 2.使用ajax,把图片的base64编码post到服务器. 3.根据 ...
- HTML5预览图片、异步上传文件
注意啦:本文的代码都是以JQuery为示例,jq_开头的变量都是jq对象. 在HTML5中,我们可以在图片上传之前对图片进行预览,就像下面这么做 jq_upload_file.change(funct ...
- 使用html5 FileReader获取图片,并异步上传到server(不使用iframe)
使用html5 FileReader获取图片,并异步上传到server(不使用iframe) 原理: 1.使用FileReader 读取图片的base64编码 2.使用ajax.把图片的base64编 ...
- HTML5实现图片文件异步上传
原文:HTML5实现图片文件异步上传 利用HTML5的新特点做文件异步上传非常简单方便,本文主要展示JS部分,html结构.下面的代码并未使用第三发库,如果有参照,请注意一些未展现出来的代码片段.我这 ...
- 使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器
使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器 ajax上传主要使用了 var reader = new FileReader() 此方法 js图片压缩主要是利用canvas进 ...
- JSP+SpringMVC框架使用WebUploader插件实现注册时候头像图片的异步上传功能
一.去官网下载webuploader文件上传插件 https://fex.baidu.com/webuploader/ 下载好后把它放到Javaweb项目的文件夹中(我放到了webcontent下面的 ...
- HTML5 文件域+FileReader 分段读取文件并上传到服务器(六)
说明:使用Ajax方式上传,文件不能过大,最好小于三四百兆,因为过多的连续Ajax请求会使后台崩溃,获取InputStream中数据会为空,尤其在Google浏览器测试过程中. 1.简单分段读取文件为 ...
- 【Web】前端裁剪图片,并上传到服务器(Jcrop+canvas)
web网站中常常有的功能:上传头像.上传封面等:一般图片都有一定的比例限制,所以需要前端在上传图片时,进行裁剪,并把裁剪后的图片进行上传. 本例采用Jcrop插件实现裁剪效果,canvas裁剪图片,并 ...
- 百度 flash html5自切换 多文件异步上传控件webuploader基本用法
双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name=& ...
随机推荐
- ajax成功跨域_自己写的
跨域的简单原理:一般浏览器会阻止js请求异端服务器(A服务器请求B服务器).js连接却除外 如:<script type="text/jscript" src="h ...
- linq多表join与group
var query =from a in this.ObjectContext.siteInfo join b in this.ObjectContext.shopInfo on a.siteID e ...
- servlet的九大内置对象
隐式对象 说明 request 转译后对应HttpServletRequest/ServletRequest对象 response 转译后对应HttpServletRespons/ServletRes ...
- ServletContext
1.为什么需要servletContext 需求1 需求2 --------------->解决之道servletContext servletContext 1.ServletC ...
- 在Linux主机上搭建SVN,用于同步提交修改,实现本地提交线上预览(SVN Hook功能实现)
原文地址: http://blog.csdn.net/ROVAST/article/details/44887707?ref=myread 注:上文中钩子使用中有错误,正确的使用如下,上文中忘记了up ...
- Python开发【第六篇】:模块
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- XStream使用总结
最近做webService报文转换的公共接口使用到了XSream工具库,写个小总结备忘... XStream是一个可以将javaBean与XML双向转换的java类库,本文内容基于xstream-1. ...
- WinForm中新开一个线程操作 窗体上的控件(跨线程操作控件)
最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录窗体的显示,开了一个线程去加载数据远程的数据,会报一个错误"线程间操作无效: 从不是 ...
- 贴上自己写的代码-jq隐藏事件
- Sql导出数据报错-->SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问
SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服 ...