【JavaScript-基础-文件上传】
Upload
最原始方式 form表单提交
// html
<form method="get" action="/test/upload">
    <input type="file" name="test" accept="image/jpeg, image/png" />
    <input type="submit" value="Submit" />
    <!-- <input id="submit" type="button" value ="Submit" /> -->
</form>
兼容性:所有浏览器都支持。
xhr2
关于xhr:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
    if(xhr.readyState == 4 && xhr.status == 200){
        alert(xhr.resopnseText);
    }else{
        alert(xhr.statusText);
    }
}
xhr.open('get', 'example.php');
xhr.send();
老版本xhr主要属性:
- xhr.readyState:XMLHttpRequest对象的状态,等于4表示数据已经接收完毕。
 - xhr.status:服务器返回的状态码,等于200表示一切正常。
 - xhr.responseText:服务器返回的文本数据
 - xhr.responseXML:服务器返回的XML格式的数据
 - xhr.statusText:服务器返回的状态文本。
 
缺点:
- 不支持读取和传送二进制文件。
 - 不能进行进度信息跟踪。
 - 受到“同域限制”,只能向同一域名的服务器请求数据。
 
xhr2
新版本的XMLHttpRequest对象,具有更多的特性:
- 可以设置HTTP请求的时限
 - 可以使用FormData对象管理表单数据
 - 上传文件
 - 跨域请求
 - 获取服务器二进制数据
 - 可获取数据传输的进度
 
请求时限
xhr.timeout = 3000;
xhr.ontimeout = function(e){
    console.log(e);
}
FormData(HTML5新增属性)
该对象可以模拟表单。
var fdata = new FormData;
var xhr = XMLHttpRequest();
// 添加表单项
fdata.append('username', '张三');
xhr.open('POST', 'test/upload' );
// 最后使用xhr2直接发送该表单对象
xhr.send(fdata);
// 也可以用来获取页面的表单
var form = document.getElementById('testForm');
var fData = new FormData(form);
fData.append('test', 123);
xhr.send(fdata);
// 上传文件
fData.append('name', file) // file 为input[type=file] change事件函数返回的file对象
接受二进制数据
略
progress
新版本xhr对象拥有progress事件。通过onprogress函数监听。
progess事件在该版本中分两种。上传时属于xhr对象,下载时属于xhr.upload对象。
document.getElementById('upload').addEventListener('change', function(){
    var file = this.files[0];
    var xhr = XMLHttpRequest();
    var formdata = new FormData(document.getElementById('form'));
    formdata.append('test', 123);
    formdata.append('file', file);
    // 监听progress事件了 上传
    xhr.upload.onprogress = function(e){
        if(event.lengthComputable){
            var percentComplete = e.loaded / e.total;
        }
    }
    xhr.open('POST', 'testagain');
    xhr.send(formdata);
})
其他相关事件:
- xhr.onload 传输完成
 - xhr.onabort 传输被取消
 - xhr.error 传输中出现错误
 - xhr.onloadstart 开始传输
 - xhr.onloadend 传输结束 但不知道是否成功
 
【JavaScript-基础-文件上传】的更多相关文章
- PHP中使用Session配合Javascript实现文件上传进度条功能
		
Web应用中常需要提供文件上传的功能.典型的场景包括用户头像上传.相册图片上传等.当需要上传的文件比较大的时候,提供一个显示上传进度的进度条就很有必要了. 在PHP .4以前,实现这样的进度条并不容易 ...
 - jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能
		
 Ajax file upload plugin是一个功能强大的文件上传jQuery插件,可自定义链接.或其它元素庖代传统的file表单上传结果,可实现Ajax动态提示文件上传 过程,同时支撑多文 ...
 - JavaScript检测文件上传的类型与大小
		
$(function(){ $("#files").change(function(){ // 添加允许上传的文件类型 var exts = new Array(); exts[0 ...
 - javascript实现文件上传之前的预览功能
		
1.首先要给上传文件表单控件和图片控件设置name属性 <div class="form-group"> <label fo ...
 - 用PHP Session和Javascript实现文件上传进度条,处理进度条
		
参考http://www.pureweber.com/article/php-upload-progress/ php显示处理进度条http://blog.csdn.net/boabc2304/art ...
 - dwz+jquery+fileupload+springmvc实现文件上传 及图片预览
		
1 前台jsp:文件的上传利用了iframe实现局部刷新功能.使用了apache的fileupload组件,用到的jar: commons-fileupload.jar,commons-io.jarD ...
 - maven工程 java 实现文件上传 SSM ajax异步请求上传
		
java ssm框架实现文件上传 实现:单文件上传.多文件上传(单选和多选),并且用 ajax 异步刷新,在当前界面显示上传的文件 首先springmvc的配置文件要配置上传文件解析器: <!- ...
 - 文件上传:swfupload.js、blueimp-file-upload
		
一.swfupload 1.下载swfupload http://code.google.com/p/swfupload/ 2. 3.API http://www.cnblogs.com/henw/ ...
 - 文件上传(asp.net webform中)
		
1.配置允许上传文件大小 <configuration> <appSettings> <!--配置上传文件最大字节数:单位KB--> <add key=&qu ...
 - 文件上传及时显示, 前端js和后端php相互结合使用
		
文件读取 javascript 绑定文件上传变化事件 onchange 利用window对象 FileReader 调用方法 readerAsDataURL onload 方法 异步读取 属性:fil ...
 
随机推荐
- [CTSC2008]祭祀(构造方案)
			
前面的话 这道题显然就是最长反链 根据 \(Dilworth\) 定理:最小链覆盖数 = 最长反链长度 然后传递闭包跑匹配即可 \(luogu\)交了一下,\(WA\) 了 \(QAQ\) 本来各种 ...
 - BZOJ2476: 战场的数目(矩阵快速幂)
			
题意 题目链接 Sol 神仙题Orzzz 考虑两边是否有\(1\) 设\(f[i]\)表示周长为\(2i\)的方案数 第一种情况:左侧或右侧有一个1,那么把这个1删去,对应的方案数为\(f[i - 1 ...
 - css控制一个元素点击后, 改变另外一个元素的状态
			
1.点击后改变子元素.myclass:active span{ color:#00f;} 此方式在ios下不生效,chrome下正常 2.改变下一个兄弟元素.myclass:active +span ...
 - Google Map API V3调用arcgis发布的瓦片地图服务
			
由于最近项目需要用到CAD制作的地图,但之前一直使用的是用谷歌离线瓦片地图的方式,怎么样把CAD图像地图一样有缩放,移动的功能放到网页显示成了难题, 原先的谷歌地图的代码难道就不能用了?重新写一套代码 ...
 - How To Manage StartUp Applications In Ubuntu
			
Ever felt the need to control startup applications in Ubuntu? You should, if you feel that your Ubun ...
 - Apache + WordPress + SSL 完全指南
			
似乎不少使用国外主机的站长都想弄个 https:// "玩",但是许多人对 SSL/TLS.HTTPS.证书等概念了解有限,而中文互联网上相关的教程也不是很完备,各种杂乱.正好,本 ...
 - 搭建hustoj
			
环境:centos6.5 + LAMP环境 LAMP环境的搭建可以参考下面这篇文章 http://www.cnblogs.com/yoke/p/7257184.html 搭建完LAMP环境之后可以按照 ...
 - Install dotNet Core on Mac
			
1. 按照官方页面进行安装 https://www.microsoft.com/net/core#macos 2. 在运行"brew link --force openssl" 时 ...
 - AdvStringGrid使用小结
			
结合最近自己做的一些工作,用到了第三方控件AdvStringGrid,这里就常用的一些技巧做个小小的总结 (1)如何设置表格固定的列数,如下图所示: 这里固定的列数为3列,通过设置下面属性来改变固定的 ...
 - maven(12),排除冲突JAR包
			
 JAR包冲突 <dependencies> <dependency> <groupId>org.springframework</groupId> ...