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 ...
随机推荐
- java和c#中String
java中: c#中: 1.拼接字符串 sql语句中 in() str="'001','002','003'";至于产生string就这样 str1="'001'&qu ...
- unittest测试
标签(空格分隔): unittest unittest介绍: python里面也有单元测试框架-unittest,相当于是一个python版的junit. 一.unittest简介 1.先导入unit ...
- weblogc SessionData.getNextId性能问题
参考:https://www.cnblogs.com/lemon-flm/p/7396627.html weblogic运行中持续报weblogic.servlet.internal.session. ...
- Oracle常用查看表结构命令(转)
转自:http://www.cnblogs.com/qingsong-do/archive/2011/11/29/2267244.html 获取表: select table_name from us ...
- python解释器配置和python常用快捷键
1.准备工作 安装好Pycharm2017版本 电脑上安装好Python解释器 2.本地解释器配置 配置本地解释器的步骤相对简洁直观: (1)单击工具栏中的设置按钮. (2)在Settings/Pre ...
- NumPy 矩阵库(Matrix)
NumPy 矩阵库(Matrix) NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象. 一个 的矩阵是一个由行(row)列(col ...
- NumPy 字符串函数
NumPy 字符串函数 以下函数用于对 dtype 为 numpy.string_ 或 numpy.unicode_ 的数组执行向量化字符串操作. 它们基于 Python 内置库中的标准字符串函数. ...
- PAT1018 (dijkstra+dfs)
There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...
- cloud server ribbon 自定义策略配置
虽然ribbon默认为我们提供了多钟负载均衡策略,但有时候我们仍然需要自定义符合自身业务逻辑的规则 使用配置文件的方式:我们只需要在配置文件中添加配置 serviceId.ribbon.NFLoadB ...
- ubuntu系统ssh遇到port 22:No route to host问题
ssh遇到这个port 22:No route to host这个问题 检查防火墙状态 (iptables -L) 检查ssh状态 (ps -elf |grep ssh) 检查网络状态(换根网线)