js 文件下载 进度条
js:
/**
* 下载文件 - 带进度监控
* @param url: 文件请求路径
* @param params: 请求参数
* @param name: 保存的文件名
* @param progress: 进度处理回调函数
* @param success: 下载完成回调函数
* eg: progressDownLoad({url:'http://loacalhost:8080/downLoad.action',name:'file.rar',progress:function(evt){
* console.log(evt);
* }});
**/
function progressDownLoad({url,filename,params,progress,success}){
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
//监听进度事件
xhr.addEventListener("progress", function (evt) {
if(progress) try{ progress.call(evt); }catch(e){}
}, false); xhr.responseType = "blob";
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
if (typeof window.chrome !== 'undefined') {
// Chrome version
var link = document.createElement('a');
link.href = window.URL.createObjectURL(xhr.response);
link.download = filename;
link.click();
} else if (typeof window.navigator.msSaveBlob !== 'undefined') {
// IE version
var blob = new Blob([xhr.response], { type: 'application/force-download' });
window.navigator.msSaveBlob(blob, filename);
} else {
// Firefox version
var file = new File([xhr.response], filename, { type: 'application/force-download' });
window.open(URL.createObjectURL(file));
}
if(success) try{ success.call(xhr); }catch(e){}
}
};
// FormData
//var formData = new FormData();
var paramsStr = '';
if(params) for (var key in params) paramsStr += '&'+key+'='+params[key];
if(paramsStr) paramsStr = paramsStr.substring(1); xhr.send(paramsStr);
}
XMLHttpRequest的监听事件:
|
onabort |
当请求中止时触发 |
|
onload |
当请求成功时触发 |
|
onloadend |
在请求成功或者失败时触发;load、abort、error、timeout事件发生之后 |
|
onloadstart |
当请求开始时触发 |
|
onreadystatechange |
当readyStateChange属性改变时触发 |
|
ontimeout |
当timeout属性指定的时间已经过去但响应依旧没有完成时触发 |
|
onerror |
当请求因错误失败时触发。注意404等状态码不是error,因为此时响应仍然是成功完成的。 |
|
onprogress |
当响应主体正在下载重复触发(约每隔50ms一次) |
js 文件下载 进度条的更多相关文章
- nprogress.js 头部进度条使用方法
nprogress.js 头部进度条 引入CSS\JS <link rel="stylesheet" type="text/css" href=" ...
- Python展示文件下载进度条
前言 大家在用Python写一些小程序的时候,经常都会用到文件下载,对于一些较小的文件,大家可能不太在乎文件的下载进度,因为一会就下载完毕了. 但是当文件较大,比如下载chromedriver的时候, ...
- H5+Ajax+WebApi实现文件下载(进度条,多文件)
前言 踩过的坑 1.WebAPI跨域 2.Jquery ajax低版本不支持XHR 2功能 3.Jquery ajax不支持Deferred的process事件 4.IE下文件名乱码问题 功能实现 & ...
- js 实现进度条功能。
/** * 纯js进度条 * Created by kiner on 15/3/22. */ function progress(options){ this.w = (options &&a ...
- Js 百分比进度条
[构想] CSS3 + JS CSS3控制进度 利用CSS3中的 @keyframes JS实现百分比 根据CSS来调整,时间 [页面代码] 第一种: 默认直接进入就是下载 CSS代码 body { ...
- vue项目实现文件下载进度条
平时业务中下载文件方式常见的有俩种: 第一种,直接访问服务器的文件地址,自动下载文件: 第二种 ,服务器返回blob文件流,再对文件流进行处理和下载. 一般小文件适用于第一种下载方案,不占用过多服务器 ...
- js控制进度条到达100%跳转界面一
进度条一般在手机上用到的比较广泛,刚好最近的项目也是一直在做手机站,这个特效是手机端的一个界面,现在我把改成pc端了,进度条的快慢速度和样式可自行调节,改动也是很方便的,不多说,看代码: <st ...
- js实现进度条
不多说,直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- JS实现 进度条 不用控件
demo1 <html> <head> <title>进度条</title> <style type="text/css"&g ...
随机推荐
- ORACLE 把不是SYS用户下的所有JOB删除掉
BEGIN FOR job_id in(select job,log_user,priv_user,schema_user from dba_jobs) LOOP IF(job_id.lo ...
- 解题6(OutputNMin)
题目描述 输入n个整数,输出其中最小的k个. 详细描述: 接口说明 原型: bool GetMinK(unsignedint uiInputNum, int * pInputArray, unsign ...
- weblogc SessionData.getNextId性能问题
参考:https://www.cnblogs.com/lemon-flm/p/7396627.html weblogic运行中持续报weblogic.servlet.internal.session. ...
- 用PLSQL Developer 查看Oracle的存储过程
1 2.输入 3.具体存储过程
- 基础DP(初级版)
本文主要内容为基础DP,内容来源为<算法导论>,总结不易,转载请注明出处. 后续会更新出kuanbin关于基础DP的题目...... 动态规划: 动态规划用于子问题重叠的情况,即不同的子问 ...
- PCB规则设置
规则设置
- f5 SSL及证书
1.SSL卸载 1)在BIG-IP上终结SSL连接BIG-IP可以全面了解应用,可以使用iRules, Profiles等,可以释放server的资源 2)包含:统一管理证书与密钥:支持基于硬件的关键 ...
- easyui datagrid 三层嵌套
代码: function local(role,region,ip){ $("#roleList").datagrid({ // title:'服务器监控列表', height:( ...
- Java IO如何读写文件
Java把这些不同来源和目标的数据都统一抽象为数据流:Java语言的输入输出功能是十分强大而灵活的:在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上 ...
- docker-ce-17.09 镜像获取,创建,删除,保存
一.安装docker的文档地址: https://docs.docker.com/engine/installation/linux/centos/ 二.安装docker 1.通过yum进行安装 &g ...