首页 > 其他分享 >XMLHttpRequest实现下载文件的功能

XMLHttpRequest实现下载文件的功能

时间:2023-06-03 17:33:33浏览次数:26  
标签:文件 XMLHttpRequest url filename xhr window blob var 下载

方式一:

download("http://.....exportData", {name: "小明", age: 18});
 
function download(url, data) {
    var xhr = new XMLHttpRequest(); //ajax的技术核心是XMLHttpRequest对象
    xhr.open("post", url);
    xhr.setRequestHeader("Content-Type","application/json;charset=UTF-8"); //设置请求头
    xhr.responseType = "blob"; //返回类型blob
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            if (xhr.status >= 200 && xhr.status < 300) {
                var data = xhr.response;
                var defaultFileName = xhr.getResponseHeader("Content-Disposition").split(";")[1].split("filename=")[1]; //从响应头中获取文件名
                var filename = decodeURI(defaultFileName); //解码
                //判断浏览器类型
                const uA = window.navigator.userAgent;
                const isIE = /msie\s|trident\/|edge\//i.test(uA) && !!(
                            "uniqueID" in document ||
                            "documentMode" in document ||
                            "ActiveXObject" in window ||
                            "MSInputMethodContext" in window
                          );
                 const blob = new Blob([data], {type: data.type});
                 if (isIE) {
                     navigator.msSaveBlob(blob, filename); // 兼容IE
                 } else {
                     const a = document.createElement("a");
                     const url = window.URL.createObjectURL(blob);
                     a.href = url;
                     a.download = filename;
                     a.click();
                     window.URL.revokeObjectURL(url);
                 }
             }
         }
    };
    xhr.onerror = function() {
        alert("下载失败")
    };
    // 发送ajax请求
    xhr.send(JSON.stringify(data)); // 数据格式,看具体接口情况决定
}

方式二:

var xhr = new XMLHttpRequest();
xhr.open('get', '请求url');
//设置请求头
xhr.setRequestHeader(window.AUTH_HEADER, window.localStorage.getItem(window.TOKEN_NAME));
//设置响应类型
xhr.responseType = 'blob';
xhr.onload = function (e) {
    if (this.status == 200) {
        var filename = xhr.getResponseHeader("Content-disposition").slice(9);
        var blob = this.response;
        var a = document.createElement('a');
        var url = URL.createObjectURL(blob);
        a.href = url;
        a.download = filename;
        document.body.appendChild(a);
        a.click();
        window.URL.revokeObjectURL(url);
    }
};
xhr.send();

 

标签:文件,XMLHttpRequest,url,filename,xhr,window,blob,var,下载
From: https://www.cnblogs.com/hhaostudy/p/17454290.html

相关文章

  • 旧版Postman下载(新版必须登录才能导入)
    貌似从版本10.14开始,从文件导入必须登录。(登录之后每次打开必须联网,体验很差。)可以先安装旧版,导入后再更新。旧版10.13.6下载链接(点击即下载)Linux版Win版Postman更新地址0.0.0.0dl.pstmn.io参考......
  • 记录一次QT5下多线程使用Qxlsx操作写EXCEL表文件问题
    问题表述:一个主线程和两个子线程,两个子线程进行写EXCEL表格文件,线程1写demo_1.xlsx,线程2写demo_2.xlsx,运行一段时间后程序异常退出?。代码如下://两个线程代码一样,只是写入的文件名不同QXlsx::Documentdocument("demo_x.xlsx");introwLen=document.dimension()......
  • 单周期CPU模型机下载【FPGA模型机课程设计】
    模型机下载【FPGA模型机课程设计】前言推荐单周期CPU模型机下载安排测试与结果5.7.2模型机下载FPGA设计代码设计MIOCIOIO1SoCInstMem附录0框架EMIOC接口FIO外设IO1测试MIOC分流9InstMem指令存储器10SoC顶层最后前言2023-5-2707:55:09周六早上睡不着了起来学习推荐5模......
  • AWVS安装 破解 附下载链接
    安装环境:windows11安装AWVS时需要注册⽤户名和密码,密码⻓度要求⾄少8位,且最少包含三种字符,建议阅读提示设置密码。下载:链接:https://pan.baidu.com/s/1whkyOPG3lsQ2VImGoavW8A?pwd=41al提取码:41al1.下载并解压AWVS安装包2.注意安装路径的选择,因为后续破解程序在查找AWVS......
  • 2. 头文件和类的说明
    Cvs.C++,关于数据与函数现在我们要正式进入语言的部分,我首先拿C++语言跟它的前身C语言来做一个在函数以及数据,它们之间的一些角色的不同来做比较。在C语言、其它语言也一样,概念是一样的。那么在C语言,你在设计程序的时候,你这边会你会准备一些数据,你会准备一些函数,函数就......
  • 特性和错误多到无法列出” 的新文件系统准备进入内核主线
    导读介绍一下特性和错误多到无法列出的问题。Bcachefs是一个写时复制(CoW)的文件系统,其源自于 Linux 内核的块缓存Bcache。本周二,Bcachefs的补丁集已正式递交审查,有望被纳入内核。开发者希望能提供类似XFS/EXT4的性能,以及类似Btrfs和ZFS的特性。其主要开发者表示......
  • 实验5 文件应用编程
    实验任务6task6#读取并处理原始数据withopen('data6.csv','r',encoding='gbk')asf:old_data=f.read().split('\n')delold_data[0]#四舍五入得到新数据new_data=[]foriinrange(len(old_data)):ifeval(old_data[i])+flo......
  • 《Linux基础与服务管理(基于CentOS 7.6)》pdf电子书免费下载
    本书以目前广泛使用的CentOS 7.6平台为例,由浅入深、系统地介绍了Linux基础及对Linux各种服务的管理。*书共11章,主要内容*括Linux简介、基础*作命令、账户与权限管理、文件系统与磁盘管理、网络管理与系统监控、软件*管理、进程与基础服务、常用服务器配置、常用集群配置、常用系......
  • MySQL导入SQL文件过大或连接超时的解决办法
    使用navicatmysql导入sql总会出现许多的error,导致导入的sql不完整。这个问题说到底是mysql执行时间、文件大小限制,只要这样配置下,就可以正常oerror导入了。setglobalmax_allowed_packet=100000000;setglobalnet_buffer_length=100000;SETGLOBALinteractive_timeout=2......
  • 国产化麒麟系统在window系统上用hyper-v搭建虚拟机环境QT安装文件传输步骤
    团队自研股票软件关注微信公众号:QStockView,下载1    麒麟系统国产化hyper-v虚拟机环境经验1.1 简介随着国际环境的变化,软硬件国产化是现在迫切的需求,只有实现了自主研发,才能自立自强,才能实现民族伟大复兴,才能实现祖国的繁荣昌盛。为了实现这一目标,需要从window开发运......