如何用js实现多个url的文件的下载

发布于 2022-09-11 22:35:49 字数 460 浏览 20 评论 0

需求:
后台返回数组,里边是多个url,每个url都是一个excel文件。

期望:
把这几个url全部下载了。

我的尝试:
我不知道location.href的情况,
第一次尝试:
我写了个for循环,结果:只下载了最后一个文件

for(var i = 0; i < urlArr.length; i++) {
  window.location.href = urlArr[i]
}

第二次尝试:
我在for循环里写了个自执行函数,结果:只下载了最后一个文件

for(var i = 0; i < urlArr.length; i++) {
  (function(i) {
    window.location.href = urlArr[i]
  })(i)
}

大佬们,你们有什么思路吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

何以畏孤独 2022-09-18 22:35:49
自问自答:

let triggerDelay = 100;
let removeDelay = 1000;
let url_arr=[];
//多个file文件选择checkbox
$('input[name="filePath"]:checked').each(function(){
    url_arr.push($(this).val());//取到下载url
});
url_arr.forEach(function(item,index){
    _createIFrame(item, index * triggerDelay, removeDelay);
})
function _createIFrame(url, triggerDelay, removeDelay) {
    //动态添加iframe,设置src,然后删除
    setTimeout(function() {
        var frame = $('<iframe style="display: none;" class="multi-download"></iframe>');
        frame.attr('src', url);
        $(document.body).after(frame);
        setTimeout(function() {
            frame.remove();
        }, removeDelay);
    }, triggerDelay);
}
意中人 2022-09-18 22:35:49

试试定时器,间隔100ms 试试看。

一百个冬季 2022-09-18 22:35:49

for循环瞬间执行的,所以只下载到最后一个文件
封装下下载,不然下载体验会很差,写个定时器调用函数,最后记得清理定时器,

downloadFile(url, filename) {
//filename下载出来自定义的名字,url是下载地址
    var link = document.createElement('a');
    link.href = url;
    link.download = filename;
    link.target = '_blank';
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    link = null;
}
陪你搞怪i 2022-09-18 22:35:49
  1. 压缩成zip下载
  2. 利用iframe下载
绅刃 2022-09-18 22:35:49
    /**
     * 导出excel文件
     * @param url String 接口地址
     * @param params JSON 接口参数
     * @param file string 文件保存名称
     *
     * @returns {Promise<void>}
     */
    async downloadExcel(url, params = {}, file = 'export.xls') {
        try {
            let {
                data: data
            } = await this.axios.post(url, this.form(params), {
                responseType: 'arraybuffer'
            });
            let blob = new Blob([data], {
                type: 'application/x-xls'
            });
            if (window.navigator.msSaveOrOpenBlob) {
                window.navigator.msSaveBlob(blob, file);
            } else {
                let link = document.createElement('a');
                link.href = window.URL.createObjectURL(blob);
                link.download = file;
                document.body.appendChild(link);
                link.click();
                window.URL.revokeObjectURL(link.href);
                document.body.removeChild(link);
            }
        } catch (err) {
            console.log(err);
            this.$message.error(err.message);
        }
    },

这是我们项目中使用的, 对你来说只需要循环执行downloadExcel就好.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文