【JavaScript-基础-文件上传】
2024-10-09 17:54:31
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 传输结束 但不知道是否成功
最新文章
- RecylerView完美实现瀑布流效果
- 大数据系列(4)——Hadoop集群VSFTP和SecureCRT安装配置
- log4j2 不使用配置文件,动态生成logger对象
- WinCE项目应用汇总
- 如何使用Profiler跟踪阻塞信息
- Linux学习 :中断处理机制 &; poll机制
- Linux 网络编程详解九
- sql server 导出表结构
- cassandra CQL 常用操作
- [转]用Linq取CheckBoxList選取項目的值
- PHP高级笔记汇总
- Windows下移动硬盘无法识别但是Mac下可以识别
- 网站集成QQ登录功能(转)
- jQuery常用代码片段
- hibernate之映射文件VS映射注解
- Python学习日记day10------函数的命名空间、作用域与闭合函数
- Asp,NET控制文件上传的大小
- Connection to Oracle failed. [66000][12505] Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor .
- Balanced Ternary String CodeForces - 1102D (贪心+思维)
- 中文乱码与字体库windows