zoukankan
html css js c++ java
js批量下载文件
关于兼容性问题:
<a href="xxx.docx" target='_blank'></a>
下载文件时,这种写法是没有兼容性问题;但是下载图片时,IE 上会出现当前页面直接打开图片的问题,即便是加了 target='_blank'。
单个文件批量下载
方法一:H5 <a> 新特性
HTML 5 里面为 <a> 标签添加了一个 download 的属性,我们可以轻易的利用它来实现下载功能。download 的属性值是可选的,它用来指定下载文件的文件名。
1
<a href="http://somehost/somefile.zip" download="filename.zip">Download file</a>
方法二:js
js 实现的思路是:
1、添加 <a>标签
用 JavaScript 创建一个隐藏的 <a> 标签
设置它的 href 属性
设置它的 download 属性
用 JavaScript 来触发这个它的 click 事件
实现代码:假设引入了 jquery.js
var a = document.createElement('a');
var url = window.URL.createObjectURL(blob);
var filename = 'what-you-want.txt';
a.href = url;
a.download = filename;
a.click();
a.remove(); // 移除掉 <a>
2、如果不用 H5 新特性,动态添加 <iframe>
会独立打开一个窗口,发起该请求,当请求完成后,该界面会自动关闭。
1 var frame = $('<iframe style="display: none;" class="multi-download"></iframe>');
2 frame.attr('src', url);
3 $(document.body).append(frame);
4 setTimeout(function() {
5 frame.remove();
6 }, 1000);
兼容 IE 360兼容模式:
如果文件不是 .png .gif .jpg 这种照片格式,可采用 window.open(url, '_blank') 下载。
function isIE () {
if (!!window.ActiveXObject || 'ActiveXObject' in window) {
return true
} else {
return false
}
},
function download () {
let url = '../../../static/cds/files/研究方案及团队情况表.docx'
if (this.isIE()) { // IE
window.open(url, '_blank')
} else {
let a = document.createElement('a') // 创建a标签
let e = document.createEvent('MouseEvents') // 创建鼠标事件对象
e.initEvent('click', false, false) // 初始化事件对象
a.href = url // 设置下载地址
a.download = 'xxxx表' // 设置下载文件名
a.dispatchEvent(e)
}
},
批量下载多个文件:
思路:将 url 放在一个数组里,循环数组并触发下载:
let files = ['url1', 'url2'] // 所有文件
files.forEach(url => {
if (this.isIE()) { // IE
window.open(url, '_blank')
} else {
let a = document.createElement('a') // 创建a标签
let e = document.createEvent('MouseEvents') // 创建鼠标事件对象
e.initEvent('click', false, false) // 初始化事件对象
a.href = url // 设置下载地址
a.download = '' // 设置下载文件名
a.dispatchEvent(e)
}
})
详细配置信息可以参考我写的这篇文章:
http://blog.ncmem.com/wordpress/2019/08/28/php%e6%96%87%e4%bb%b6%e6%89%b9%e9%87%8f%e4%b8%8b%e8%bd%bd/
查看全文
相关阅读:
easyexcel: The maximum length of cell contents (text) is 32,767 characters
分库分表情况下添加索引
如何保证消息顺序执行(Rabbitmq/kafka)
MySQL Boolean类型的坑
Redis居然还有比RDB和AOF更强大的持久化方式?
ThreadLocal的应用场景和注意事项有哪些?
spring boot 设置tomcat post参数限制
并发慎用——System.currentTimeMillis()
Java多线程中static变量的使用
临时修改session日期格式冲突问题
原文地址:https://www.cnblogs.com/songsu/p/11303697.html
最新文章
时间同步ntpdate报错的其他解决方案
【Selenium学习笔记】介绍和安装
系统入侵反追踪的排查分析
【解决方法】ModuleNotFoundError: No module named '_ctypes'
In aggregated query without GROUP BY, expression #1 of SELECT list contains
模拟title自定义样式
在保持滚动功能的前提下隐藏滚动条的方法
VUE禁止单个页面的滚动条
JavaScript嵌套函数this的重定向
C++中cin,cout进制,数据宽度与对齐,精度,取整
热门文章
mysql sum函数中对两字段做运算时有null时的情况
学习乔新亮老师课程的总结
Mysql排序后分页,因数据重复导致分页数据紊乱的问题
记录几个经常用到的泛型方法定义模板
多少事从来急,天地转光阴急
macbookpro触摸板突然失灵按压无震动反馈和回弹感
mysql分组后获取每个组排序后的第一条数据(整行)
存储过程--添加索引、删除索引
Caused by: com.alibaba.druid.pool.DataSourceClosedException: dataSource already closed
SpringBoot启动时让方法自动执行的几种实现方式
Copyright © 2011-2022 走看看