http上传文件和进度监控以及构造multipart/form-data请求
来源:互联网 发布:易观千帆数据哪来的 编辑:程序博客网 时间:2024/06/05 10:40
http上传文件
html代码
<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>http</title> <link rel="stylesheet" href=""> <script src="js/common.js"></script> <script src="js/http.js"></script></head><body><form action="upload" method="post" accept-charset="utf-8"> <input type="file" data-uploadTo="http://www.baidu.com"></input></form></body></html>
js代码
//自用工具库var whenReady = (function(){ var ready = false; var funcs = [];//存储函数的数组 function handler(e){ if(ready) return; if(e.type === 'readystatechange' && document.readyState !== 'commplete'){ return; } for(var i=0;i<funcs.length;i++){ funcs[i].call(document); } //进行标记 ready = true; funcs = null;//置空 } if(document.addEventListener){ document.addEventListener('DOMContentLoaded', handler,false); document.addEventListener('readystatechange', handler,false); window.addEventListener('load',handler,false); }else{ //兼容IE等不支持addEventListener方法的浏览器 document.attachEvent('onreadystatechange',handler); window.attachEvent('onload',handler); } return function isReady(f){ if(ready){ f.call(document); }else{ funcs.push(f); } }}());whenReady(function(){ var elts = document.getElementsByTagName('input'); for (var i = 0; i < elts.length; i++) { var input=elts[i]; if(input.type !=='file') continue; var url = input.getAttribute('data-uploadTo'); if(!url) continue; input.addEventListener('change', function(){ var file = this.files[0]; if(!file) return; var xhr = new XMLHttpRequest(); xhr.open('POST',url); xhr.send(file); },false); } //postFormData('http://www.baidu.com'); checkBrowserIsSupportProgressEvent();//检测当前浏览器对http progress事件的支持情况!});
构造multipart/form-data请求
//使用POST方法发送multipart/form-data请求主题function postFormData(url,data,callback){ if(typeof FormData === 'undefined') throw new Error('FormData is not implemented!'); var request = new XMLHttpRequest(); request.open('POST',url); request.onreadystatechange = function(){ if(request.readyState === 4 && callback){ return callback(request); } } var formdata = new FormData(); for(name in formdata){ if(!formdata.hasOwnProperty(name)) continue; if(typeof formdata[name] ==='function') continue; formdata.append(name,formdata[name]); } //在mutipart请求主体中发送名/值对 每队都是请求的一部分 注意当传入FormData 对象时 send()会自动设置Content-Type request.send(formdata);}
http进度事件
并不是所有的浏览器都支持progress事件
//HTTP的进度事件function checkBrowserIsSupportProgressEvent(){ if('onprogress' in (new XMLHttpRequest())){ alert('支持http进度事件!'); }else{ alert('对不起您的浏览器不支持http进度事件!请更换谷歌或者火狐浏览器!'); }}request.onprogress=function(e){ if(e.lengthComputable){ progress.innerHTML = Math.round(100*e.loaded/e.total)+" % complete!"; }}
0 0
- http上传文件和进度监控以及构造multipart/form-data请求
- http以post方式上传一个文件,构造其请求头和消息报文 application/x-www-form-urlencoded multipart/form-data
- Http 上传文件之multipart form-data
- multipart/form-data 上传文件
- multipart/form-data请求与文件上传的细节
- HTTP multipart/form-data格式之文件上传
- HTTP multipart/form-data 请求协议分析
- HTTP协议之multipart/form-data请求
- HTTP multipart/form-data 上传方式说明
- 上传文件multipart form-data boundary 说明
- Multipart/form-data POST文件上传详解
- Multipart/form-data POST文件上传详解
- 文件上传 enctype multipart/form-data
- Multipart/form-data POST文件上传详解
- python 发送上传文件multipart/form-data
- Multipart/form-data POST文件上传详解
- Multipart/form-data POST文件上传分析
- Multipart/form-data POST文件上传详解
- ios的toolbar的item的几种简单布局
- Hadoop 解除 "Name node is in safe mode"
- HDU 1.1.2 A+B for Input-Output Practice (II)
- 事件冒泡和事件捕获
- cocostudio与cocosbuilder对比整理
- http上传文件和进度监控以及构造multipart/form-data请求
- 关于Sql Server2008升级成企业版本后,通过命令查询还是“快版”的说明
- 设计模式之享元模式
- elasticsearch 警告 org.jboss.netty.handler.codec.frame.TooLongFrameException: HTTP content length exce
- [C#] 如何分析stackoverflow等clr错误
- 利用函数递归实现无限分类
- Suricata规则编写——数据包头部关键字
- 使用STM32CUBEMX生成FatFS代码,操作SPI FLASH
- iOS文件操作(更新中)