js:

  1. /**
  2. * 下载文件 - 带进度监控
  3. * @param url: 文件请求路径
  4. * @param params: 请求参数
  5. * @param name: 保存的文件名
  6. * @param progress: 进度处理回调函数
  7. * @param success: 下载完成回调函数
  8. * eg: progressDownLoad({url:'http://loacalhost:8080/downLoad.action',name:'file.rar',progress:function(evt){
  9. * console.log(evt);
  10. * }});
  11. **/
  12. function progressDownLoad({url,filename,params,progress,success}){
  13. var xhr = new XMLHttpRequest();
  14. xhr.open("POST", url, true);
  15. //监听进度事件
  16. xhr.addEventListener("progress", function (evt) {
  17. if(progress) try{ progress.call(evt); }catch(e){}
  18. }, false);
  19.  
  20. xhr.responseType = "blob";
  21. xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
  22. xhr.onreadystatechange = function () {
  23. if (xhr.readyState === 4 && xhr.status === 200) {
  24. if (typeof window.chrome !== 'undefined') {
  25. // Chrome version
  26. var link = document.createElement('a');
  27. link.href = window.URL.createObjectURL(xhr.response);
  28. link.download = filename;
  29. link.click();
  30. } else if (typeof window.navigator.msSaveBlob !== 'undefined') {
  31. // IE version
  32. var blob = new Blob([xhr.response], { type: 'application/force-download' });
  33. window.navigator.msSaveBlob(blob, filename);
  34. } else {
  35. // Firefox version
  36. var file = new File([xhr.response], filename, { type: 'application/force-download' });
  37. window.open(URL.createObjectURL(file));
  38. }
  39. if(success) try{ success.call(xhr); }catch(e){}
  40. }
  41. };
  42. // FormData
  43. //var formData = new FormData();
  44. var paramsStr = '';
  45. if(params) for (var key in params) paramsStr += '&'+key+'='+params[key];
  46. if(paramsStr) paramsStr = paramsStr.substring(1);
  47.  
  48. xhr.send(paramsStr);
  49. }

XMLHttpRequest的监听事件:

onabort

当请求中止时触发

onload

当请求成功时触发

onloadend

在请求成功或者失败时触发;load、abort、error、timeout事件发生之后

onloadstart

当请求开始时触发

onreadystatechange

当readyStateChange属性改变时触发

ontimeout

当timeout属性指定的时间已经过去但响应依旧没有完成时触发

onerror

当请求因错误失败时触发。注意404等状态码不是error,因为此时响应仍然是成功完成的。

onprogress

当响应主体正在下载重复触发(约每隔50ms一次)

js 文件下载 进度条的更多相关文章

  1. nprogress.js 头部进度条使用方法

    nprogress.js 头部进度条 引入CSS\JS <link rel="stylesheet" type="text/css" href=" ...

  2. Python展示文件下载进度条

    前言 大家在用Python写一些小程序的时候,经常都会用到文件下载,对于一些较小的文件,大家可能不太在乎文件的下载进度,因为一会就下载完毕了. 但是当文件较大,比如下载chromedriver的时候, ...

  3. H5+Ajax+WebApi实现文件下载(进度条,多文件)

    前言 踩过的坑 1.WebAPI跨域 2.Jquery ajax低版本不支持XHR 2功能 3.Jquery ajax不支持Deferred的process事件 4.IE下文件名乱码问题 功能实现 & ...

  4. js 实现进度条功能。

    /** * 纯js进度条 * Created by kiner on 15/3/22. */ function progress(options){ this.w = (options &&a ...

  5. Js 百分比进度条

    [构想] CSS3 + JS CSS3控制进度 利用CSS3中的 @keyframes JS实现百分比 根据CSS来调整,时间 [页面代码] 第一种: 默认直接进入就是下载 CSS代码 body { ...

  6. vue项目实现文件下载进度条

    平时业务中下载文件方式常见的有俩种: 第一种,直接访问服务器的文件地址,自动下载文件: 第二种 ,服务器返回blob文件流,再对文件流进行处理和下载. 一般小文件适用于第一种下载方案,不占用过多服务器 ...

  7. js控制进度条到达100%跳转界面一

    进度条一般在手机上用到的比较广泛,刚好最近的项目也是一直在做手机站,这个特效是手机端的一个界面,现在我把改成pc端了,进度条的快慢速度和样式可自行调节,改动也是很方便的,不多说,看代码: <st ...

  8. js实现进度条

    不多说,直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  9. JS实现 进度条 不用控件

    demo1 <html> <head> <title>进度条</title> <style type="text/css"&g ...

随机推荐

  1. java和c#中String

    java中: c#中: 1.拼接字符串 sql语句中 in() str="'001','002','003'";至于产生string就这样  str1="'001'&qu ...

  2. unittest测试

    标签(空格分隔): unittest unittest介绍: python里面也有单元测试框架-unittest,相当于是一个python版的junit. 一.unittest简介 1.先导入unit ...

  3. weblogc SessionData.getNextId性能问题

    参考:https://www.cnblogs.com/lemon-flm/p/7396627.html weblogic运行中持续报weblogic.servlet.internal.session. ...

  4. Oracle常用查看表结构命令(转)

    转自:http://www.cnblogs.com/qingsong-do/archive/2011/11/29/2267244.html 获取表: select table_name from us ...

  5. python解释器配置和python常用快捷键

    1.准备工作 安装好Pycharm2017版本 电脑上安装好Python解释器 2.本地解释器配置 配置本地解释器的步骤相对简洁直观: (1)单击工具栏中的设置按钮. (2)在Settings/Pre ...

  6. NumPy 矩阵库(Matrix)

    NumPy 矩阵库(Matrix) NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象. 一个 的矩阵是一个由行(row)列(col ...

  7. NumPy 字符串函数

    NumPy 字符串函数 以下函数用于对 dtype 为 numpy.string_ 或 numpy.unicode_ 的数组执行向量化字符串操作. 它们基于 Python 内置库中的标准字符串函数. ...

  8. PAT1018 (dijkstra+dfs)

    There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...

  9. cloud server ribbon 自定义策略配置

    虽然ribbon默认为我们提供了多钟负载均衡策略,但有时候我们仍然需要自定义符合自身业务逻辑的规则 使用配置文件的方式:我们只需要在配置文件中添加配置 serviceId.ribbon.NFLoadB ...

  10. ubuntu系统ssh遇到port 22:No route to host问题

    ssh遇到这个port 22:No route to host这个问题 检查防火墙状态 (iptables -L) 检查ssh状态 (ps -elf |grep ssh) 检查网络状态(换根网线)