【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 ...
随机推荐
- PoPo数据可视化周刊第4期
PoPo数据可视化 聚焦于Web数据可视化与可视化交互领域,发现可视化领域有意思的内容.不想错过可视化领域的精彩内容, 就快快关注我们吧 :) 微信号:popodv_com 由于国庆节的原因,累计 ...
- WinForm实现Rabbitmq官网6个案例-Routing
代码: namespace RabbitMQDemo { public partial class Routing : Form { private string exchangeName = &qu ...
- Windows server 2008 Tips
Tips for remote server in domain. Some Definition user [user] group workgroup domain Local account d ...
- 插入外置网卡端口顺序混乱--linux系统
本文皆是作者工作学习中的理解或感悟,欢迎大家提出问题,一起讨论!! 一.问题提出 一般的主板上都带有两个网卡接口,linux系统启动后一般命名为eth0,eth1,当然如果我们不对eth0与eth1进 ...
- INFORMATICA 开发规范
目 录 Informatica开发规范.... 1 目 录.... 2 1 编写目的.... 4 2 ETL研发责任人界定.... 4 3 ETL ...
- Exchange 2010 服务器邮件传输配额设置详解
在企业的邮件系统管理中,传输邮件的大小配额关系到邮件队列.邮件传输速度以及关系到该附件是否能正常发送,直接关系到用户体验.为此,传输邮件大小的设置,也经常是企业邮件管理员比较迷惑的地方.如下: 1) ...
- redis-day1
1 Redis 概述 REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统.redis和大名鼎鼎的Memcached缓存服务软件很像, ...
- 超强PHP集成环境,支持800多个不同PHP版本同时运行,无限自定义添加mysql与php版本
转载自今日头条 小编最近发现PHPWAMP竟然又更新了,激动之余向大家介绍一下新版的强大功能. PHPWAMP是纯绿色集成环境,高版本php无需安装VC运行库,默认已经集成VC运行库!Nginx支持服 ...
- 相同数据源情况下,使用Kafka实时消费数据 vs 离线环境下全部落表后处理数据,结果存在差异
原因分析: 当某个consumer宕机时,消费位点(例如2s提交一次)尚未提交到zookeeper,此时Kafka集群自动rebalance后另一consumer来接替该宕机consumer继续消费, ...
- java多态-优化上个实例
开闭原则:对修改是封闭的,对扩展是开放的,不要违反开闭原则. 可以使用多态解决这个问题.父类的引用变量可以引用子类是对象. 写的越是抽象,越是稳定 public class printerDemo { ...