JavaScript tips —— 关于下载与导出的二三事
前言
- 获取文件流,编码后下载
- 获取文件的url,直接下载
浏览器的安全策略
预开新标签页
做法
- 在异步操作之前,先打开一个新标签页
- 请求后端资源的地址
- 获取url后去修改空白页的url
const downloadTab = window.open('about:blank'); ajax.get('xxx').then(url => { // 使用后端资源的url进行下载 downloadTab.location.href = href; }).catch(err => { // 处理异常 downloadTab.close(); })
缺点
- 不管请求成功还是失败都会有新页面的闪烁出现
- 打开的新页面在什么时候关闭是个问题,因为如果请求时间过长,用户可能自己关闭新页面,更不好处理的情况是页面什么时候触发了下载,因为如果只是更改url就关闭窗口可能还没有开始下载的操作。
生成iframe
做法
ajax.get('xxx').then(href => { if (!href) { return; } if (!this.downIframe) { this.downIframe = document.createElement('iframe'); // 动态创建iframe this.downIframe.src = href; // iframe 中加载的页面 this.downIframe.id = 'downloadIframe'; // iframe 中加载的页面 this.downIframe.style.width = '1px'; this.downIframe.style.height = '1px'; this.downIframe.style.position = 'absolute'; this.downIframe.style.left = '-100px'; document.body.appendChild(this.downIframe); // 添加到当前窗体 } else { this.downIframe.src = href; // iframe 中加载的页面 } }).catch(err => { // 处理异常 })
缺点
生成标签
ajax.get('xxx').then(href => { if (!href) { return; } var a = document.createElement('a'); var url = href; var filename = 'test.zip'; a.href = url; a.download = filename; // 在没有download属性的情况,target="_blank",仍会阻止打开 a.click(); }).catch(err => { // 处理异常 })
处理文件流
function funDownload(content, filename) { // 创建隐藏的可下载链接 var link = document.createElement('a'); link.download = filename; link.style.display = 'none'; // 字符内容转变成blob地址 var blob = new Blob([content]); //如果是excel格式 //var blob = new Blob([content], {type: 'application/vnd.ms-excel'}), link.href = URL.createObjectURL(blob); // 触发点击 document.body.appendChild(link); link.click(); // 然后移除 document.body.removeChild(link); };
createObjectURL()
方法时,都会创建一个新的 URL 对象,即使你已经用相同的对象作为参数创建过。当不再需要这些 URL 对象时,每个对象必须通过调用 URL.revokeObjectURL() 方法来释放。浏览器会在文档退出的时候自动释放它们,但是为了获得最佳性能和内存使用状况,你应该在安全的时机主动释放掉它们。 原文作者:nanchenk
本文来源: 掘金 如需转载请联系原作者
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
做好前端你需要看这些书
HTML、CSS 类别书籍,都是大同小异,在当当网、卓越网搜索一下很多推荐。如果感觉学的差不多了,可以关注一下《CSS禅意花园》,这个很有影响力。 Javascript 的书籍 推荐看老外写的,国内很多 Javascript 书籍的作者对 Javascript 语言了解的都不是很透彻。 这里推荐几本 Javascript 书籍: 初级读物: 《JavaScript高级程序设计》:一本非常完整的经典入门书籍,被誉为JavaScript圣经之一,详解的非常详细,最新版第三版已经发布了,建议购买。 《JavaScript王者归来》百度的一个Web开发项目经理写的,作为初学者准备的入门级教程也不错。 中级读物: 《JavaScript权威指南》:另外一本JavaScript圣经,讲解的也非常详细,属于中级读物,建议购买。 《JavaScript.The.Good.Parts》:Yahoo大牛,JavaScript精神领袖Douglas Crockford的大作,虽然才100多页,但是字字珠玑啊!强烈建议阅读。 《高性能JavaScript》:《JavaScript高级程序设计》作者Nichol...
- 下一篇
C# 操作Word书签(二)——插入图片、表格到书签;读取、替换书签
概要 书签的设置可以帮助我们快速的定位某段文字,使用起来很方便,也很节省时间。在前一篇文章“C# 如何添加/删除Word书签”中介绍了插入、删除书签的方法,本篇文章将对C# 操作Word书签的功能做进一步介绍。示例内容将包含以下要点: 在现有书签位置插入图片 在现有书签位置插入表格 读取书签位置的文档内容 替换现有书签位置内容 使用工具 Spire.Doc for .NET 6.1 Visual Studio ps:下载安装该类库后,注意添加引用Spire.Doc.dl到项目程序,dll文件可在安装路径的Bin文件夹中获取。 示例代码(供参考) 测试文档如下: 【示例1】 在现有书签位置插入图片 步骤 1: 添加using指令 using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.Drawing; 步骤 2 :主要代码段 //创建实例,加载文档 Document document = new Document(); document.LoadFromFile("test.d...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS关闭SELinux安全模块
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范