网站首页 > 技术文章 正文
很多情况下都是通过 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-05-15 网页中如何实现点击按钮将文本复制到剪贴板?
- 2025-05-15 JavaScript 事件——“事件类型”中“UI事件”的注意要点
- 2025-05-15 WEB大前端进阶之模块化
- 2025-05-15 Ajax跨域请求的两种实现方式
- 2025-05-15 多可文档系统在Edge, Chrome等浏览器启动客户端的代码及方法
- 2025-05-15 vue下载excel文件方法
- 2025-05-15 three.js 入门
- 2025-05-15 判断变量是否为数组
- 2025-05-15 Js基础3:节点创建
- 2025-05-15 React对话框组件实现
- 1507℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 510℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 487℃MySQL service启动脚本浅析(r12笔记第59天)
- 467℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 465℃启用MySQL查询缓存(mysql8.0查询缓存)
- 445℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 423℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 421℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)