js 实现多个文件循环下载 批量下载

这篇具有很好参考价值的文章主要介绍了js 实现多个文件循环下载 批量下载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

js 实现多个文件循环下载 批量下载

最近业务涉及勾选之后多个word文件下载 开始用的循环方式 怎么试都是下载最后一个文件 后来找到原因是 当循环执行下载的时候,几个下载命令连续执行的时候,浏览器会取消上一个下载,直接下载最后一个文件。所以要加一个定时器,让几个连续的下载请求之间有时间间隔
所以解决思路有了

const downloadFile = (src: string) => {
  const a = document.createElement("a");
  a.setAttribute("download", "111");
  a.href = src
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
};
const exportWord = (typeName: string, fileName: string) => {
  if (selectedRows.value.length === 0) {
    return message.error("至少选择一项");
  }
  selectedRows.value.forEach((item: any, index: number) => {
      //此处src 要用let const 或者闭包处理
    let src: string = `${VITE_TJBB_API}/export?name=${typeName}&type=doc&jzwid=${item.id}`;
    setTimeout(() => {
      downloadFile(src);
    }, 500 * index);
  });
};

还有一种方式是通过iframe实现 不需要加定时器 浏览器会询问是否允许下载多个文件 代码如下

const downloadFile = (src: string) => {
  const iframe = document.createElement("iframe");
  iframe.style.display = "none";
  iframe.src = src;
  document.body.appendChild(iframe);
  setTimeout(() => {
    iframe.remove();
  }, 2 * 60 * 1000);
};

const exportWord = (typeName: string, fileName: string) => {
  if (selectedRows.value.length === 0) {
    return message.error("至少选择一项");
  }
  selectedRows.value.forEach((item: any, index: number) => {
    let src: string = `${VITE_TJBB_API}/export?name=${typeName}&type=doc&jzwid=${item.id}`;
    downloadFile(src);
  });
};

友情提示 对于这种 直接创建a标签形式下载 的 通过a.download 指定名字下载是没有的 你需要 通过请求 获取文件流 转成url才可以在前端指定下载名称 示例如下‘

//下载文件 指定文件名字 直接用a标签下载无法指定文件名字
export const downloadFile = (src: any, fileName: string) => {
  if (!src) {
    return message.error("缺少文件路径");
  }
  // if (!fileName) {
  //   return message.error("缺少文件名称");
  // }
  const x = new window.XMLHttpRequest();
  x.open("GET", src, true);
  x.responseType = "blob";
  x.onload = () => {
    const url = window.URL.createObjectURL(x.response);
    const a = document.createElement("a");
    a.href = url;
    a.download = fileName;
    a.click();
  };
  x.send();
};

也可以使用axios 原理一样 但是涉及请求 可能存在跨域 跨域处理可以愉快的自定义文件名字了

完结撒花文章来源地址https://www.toymoban.com/news/detail-504565.html

到了这里,关于js 实现多个文件循环下载 批量下载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JMeter循环读取CSV文件实现接口批量测试

    目录 前言: 1、添加线程组 2、添加HTTP信息头管理器 3、添加HTTP请求 4、添加察看结果树 5、添加循环控制器 6、在循环控制器下添加CSV配置文件

    2024年02月09日
    浏览(37)
  • 【Python】【完整代码】秀!巧用Python实现对单个文件或多个文件中的指定字符串进行批量修改/替换(超详细)

    目录 1. 对单份文件 1.1 将替换后的内容保存到新文件中 1.2 直接替换当前文件中的字符

    2024年02月21日
    浏览(51)
  • Java实现打包压缩文件或文件夹生成zip以实现多文件批量下载

    有时候在系统中需要一次性下载多个文件,但逐个下载文件比较麻烦。这时候,最好的解决办法是将所有文件打包成一个压缩文件,然后下载这个压缩文件,这样就可以一次性获取所有所需的文件了。 下面是一个名为CompressUtil的工具类的代码,它提供了一些方法来处理文件压

    2024年02月06日
    浏览(56)
  • 在vue中实现多个文件下载&&element ui 实现弹窗

    后端返回多个URL,前端直接点击下载 1.1 window.open let url = “xxx”; window.open(url) 在新窗口打开该下载链接,只能打开一个,多个文件下载不支持 1.2 iframe方法 使用iframe方法(此方法浏览器会跳出弹窗,是否允许下载多个文件,用户体验不好) 1.3 使用a标签 使用a标签(不用点允

    2023年04月09日
    浏览(36)
  • 记一次 OSS 大批量文件下载的实现 → bat脚本不好玩!

    一天夜里,侄女跟我哥聊天 侄女一脸期待的看着我哥:爸爸,你说妈妈和奶奶谁漂亮啊? 我哥不慌不忙的拿起一粒瓜子,轻声说道:为啥没有你啊? 侄女笑容渐起,似乎得到了她想要的回答,仍继续问道:那妈妈和奶奶还有我,谁漂亮? 我哥瞄了一眼侄女,又拿起一粒瓜子

    2024年02月05日
    浏览(42)
  • vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法

    由于vue为单页面项目,通过控制组件局部渲染,main.js是整个项目唯一的入口,整个项目都在一个index.html外壳中。 若项目过大,会造成单页面负载过重;同时,多页面利于模块独立部署。 如果项目中不同的页面需要不同的main.js和App.vue这样就需要配置多个入口了。 要单独将页

    2024年01月22日
    浏览(87)
  • 批量将excel文件按照分类生成多个excel文件

    要批量将Excel文件按照分类生成多个Excel文件,文件名为分类名,可以使用Python中的pandas库来实现。下面是示例代码: import pandas as pd import os def split_excel_by_category(file_path, category_column, output_folder):     # 读取Excel文件     df = pd.read_excel(file_path)     # 获取分类列的唯一值    

    2024年02月11日
    浏览(41)
  • SpringBoot整合hdfs,实现文件上传下载删除与批量删除,以及vue前端发送请求,实现前后端交互功能;

    部分工具类代码参考文章:https://blog.csdn.net/qq_27242695/article/details/119683823 前端实现效果 HDFSController HDFS FileInterface (文件接口) HDFS FileImplService (文件接口实现类) HDFSConfig(从yaml读取文件) HDFSUTils 前端vue代码:

    2024年02月16日
    浏览(79)
  • JS实现Blob文件流下载

    在 JavaScript 中,可以使用浏览器提供的 Blob 对象和 URL.createObjectURL() 方法来实现文件流下载。 下面是一个示例代码,可以帮助了解如何在 JavaScript 中实现文件流下载: 在这个示例中,我们定义了一个 downloadFile() 函数,这个函数接受三个参数: data 、 filename 和 type 。其中,

    2024年02月15日
    浏览(52)
  • JS批量下载图片

    例如,你在网上,看到某个网页可以下载很多图片资源,但是没有批量下载怎么办?于是,幻想有这么个函数 downloadImages(imageURLs) 批量下载。咋整? 解决下载问题 一般情况下,用 a 标签可以实现文件的下载功能。一般下载是这样的代码: 如此,点击下载,即可显示下载,此

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包