网站首页 > 技术文章 正文
很多情况下都是通过 window.location.href 来下载文件。这种方式,一般是前后端的登录态是基于 Cookie + Session 的方式,由于浏览器默认会将本地的 cookie 塞到 HTTP 请求首部字段的 Set-Cookie 中,从而实现来带用户的 SessionId,所以,我们也就可以用 window.location.href 来打开一个链接下载文件。
众所周知,还有另一种登录态的处理方式 JWT (JSON Web Token)。这种情况,一般会要求,前端在下载文件的时候在请求首部字段中添加 Token 首部字段。那么,这样一来,我们就不能直接通过 window.location.href 来下载文件。
不过,幸运的是我们有 Blob,它是浏览器端的类文件对象,基于二进制数据,我们可以通过它来优雅地处理文件下载,不限于音视频、PDF、Excel 等等。所以,今天我们就从后端导出文件到 HTTP 协议、非简单请求下的预检请求、以及最后的 Blob 处理文件,了解一番何为其然、如何使其然?
responseType: 'blob' // 这一行是关键,拿到blob数据类型的文件
axios.request({
url: "/getDownloadFile",
method: "post",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
responseType: "blob",
})
.then(res => {
})
通过a标签打开新页面下载文件
console.log("下载文件内容", this.content)
const blob = new Blob([this.content], {type: 'text/plain;charset=utf-8'})
let downloadElement = document.createElement('a');
let href = window.URL.createObjectURL(blob); //创建下载的链接
downloadElement.href = href;
let time = (new Date()).valueOf();
downloadElement.download = '代码库' + time + '.java'; //下载后文件名
document.body.appendChild(downloadElement);
downloadElement.click(); //点击下载
document.body.removeChild(downloadElement); //下载完成移除元素
window.URL.revokeObjectURL(href); //释放掉blob对象
- 上一篇: 存储型XSS的危害
- 下一篇: MVP最小可用产品实践:用Pywebio库写一个接口加解密的小工具
猜你喜欢
- 2025-08-03 一起学 pixijs(4):如何绘制文字
- 2025-08-03 csdn免录可复制实现当前页面生成二维码链接
- 2025-08-03 前端分享-少年了解过iframe么
- 2025-08-03 收好这个提示词!让DeepSeek帮我们生成精美网页表格!
- 2025-08-03 前端录屏黑科技:几行 JS 代码就能实现!
- 2025-08-03 Fragment :从基本原理到深度解析
- 2025-08-03 浅谈JavaScript中Blob对象
- 2025-08-03 救命!这10个Vue3技巧藏太深了!性能翻倍+摸鱼神器全揭秘
- 2025-08-03 浏览器点击链接打开指定APP是如何实现的?
- 2025-08-03 数组长度检查竟然这么慢!用这行代码解决
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)