如何在JS中下载浏览器(包括Firefox)中的10个以上文件

2023-12-06

我尝试使用以下代码一次下载多个文件:

var urls = [...];

for(var i = 0; i < urls.length; i++) {

    var tempLink = document.createElement('a');
    tempLink.setAttribute('href', urls[i]);
    tempLink.setAttribute('download', urls[i].split('/')[urls[i].split('/').length*1-1*1]);
    tempLink.click();
}

还有两个问题:

1.Chrome 和 Opera 一次仅下载 10 个文件

2.在 Firefox 中,代码根本不起作用

这两个问题如何解决?

附注我知道如何使用服务器端压缩所有文件,但我对没有服务器端的静态网站的 JS 解决方案感兴趣


最好的方法可能是将它们全部打包在一个文件中,而不是下载多个文件。 例如,您可以从所有这些文件生成一个 zip 文件。

既然您说过服务器端解决方案不适合您,但您的所有文件都托管在您的域上,那么我可以建议您首先通过 AJAX 获取所有文件(因为这些是页面上已加载的图像,它们甚至不需要再次实际下载,而只需从缓存中收集),然后在前端构建 zip 文件。

// all images are from wikimedia
const urls = ['/3/3b/Hulda_Klagers_house_and_lawn.jpg/320px-Hulda_Klagers_house_and_lawn.jpg', '/1/15/P%C3%A8re-Lachaise_-_Division_79_-_Floriot_02.jpg/320px-P%C3%A8re-Lachaise_-_Division_79_-_Floriot_02.jpg', '/a/a6/V37-20180910-055_%2845088120261%29.jpg/320px-V37-20180910-055_%2845088120261%29.jpg', '/2/2b/MormantulLuiAmzaPellea_%284%29.JPG/360px-MormantulLuiAmzaPellea_%284%29.JPG', '/f/f8/Launch_of_LAWRENCE_LCCN2014710971.tif/lossy-page1-174px-Launch_of_LAWRENCE_LCCN2014710971.tif.jpg']
.map((url) => 'https://upload.wikimedia.org/wikipedia/commons/thumb' + url);

fetchBlobs(urls)
  .then(pack)
  .then((zipFile) => dl.href = URL.createObjectURL(zipFile));

function fetchBlobs(urls) {
  return Promise.all(
    urls.map((url) =>
      fetch(url)
      .then((resp) => resp.blob())
      .then((blob) => {
        // store the file name
        blob.name = url.slice(url.lastIndexOf('/') + 1)
        return blob;
      })
    )
  );
}
function pack(blobs) {
  const zip = new JSZip();
  const folder = zip.folder('my_images');
  blobs.forEach((blob) => folder.file(blob.name, blob));
  return zip.generateAsync({type : "blob"});
}
<!-- using JSZip library https://stuk.github.io/jszip/ -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.2.0/jszip.min.js"></script>
<a id="dl" download="images.zip">download</a>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在JS中下载浏览器(包括Firefox)中的10个以上文件 的相关文章

随机推荐

  • 导入键盘出现 python 错误

    所以我使用下载了 python 2 7 的键盘模块 pip install keyboard 安装后我尝试将其导入 import keyboard as keyboard 但是它给了我这个错误 File C Python27 lib sit
  • 静默使用 Microsoft XPS Document Writer 打印机创建 XPS

    几天来 我一直在努力在没有对话框的情况下将 XPS 打印到文件 我读过 CodeGuru 和 Feng Yuan MSDN 中有关此事的帖子 以及这里的许多讨论主题 但我仍然迷失 具体来说 我的场景是我必须使用一个第三方 API 它会打印到
  • 递归地伊托亚

    我一直在尝试写一个递归的函数版本itoa 代码如下所示 void itoa int n char s static int i 0 if n 10 0 itoa n 10 s else if n lt 0 i 1 s 0 is allrea
  • Gimp 程序中的 OpenCV Python 脚本 - 草地/硬表面边缘检测

    我想开发一个 Python OpenCV 脚本来复制 改进我开发的 Gimp 程序 该过程的目标是提供一个遵循草地和硬表面之间分界线的 x y 点阵列 这个阵列将使我能够完成我的 500 磅 54 英寸宽的压力清洗机器人 它有一个 Rasp
  • 超高性能 C/C++ 哈希映射(表、字典)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我需要将原始键 int 可能是long 映射到高性能哈希映射数据结构中的结构值 我的程序将有几百个这样的地图 每个地图通常最多有几千个条目 然而 地
  • 检票处的脚手架

    是否有适用于 Wicket 1 5 的有效 支持和维护的脚手架解决方案 我知道 Wicketopia 位于两个不同地点来源锻造 and github但这仍然针对 wicket 1 4 带来了自己的 wicket 并且发送到邮件列表的邮件在几
  • 如果更改 2 个部分中的线程数,OpenMP 线程的 SPID 是否应该更改?

    我有 2 个 OpenMP 并行区域 我在 Linux 下的 gcc 下使用 C 具有不同数量的线程 假设一个区域有 4 个线程 另一个区域有 8 个线程 然后 如果我跑ps T pidof name of process 4 个 SPID
  • 为什么数组集合中没有拼接?

    据我所知 拥有集合类背后的整个想法是引入额外的包装方法 这对开发人员来说会很方便 那为什么Flex中的ArrayCollection好像没有一些array有的方法呢 ArrayCollection 没有返回新数组的复制 连接 连接或拼接方法
  • Web 架构:MVC、延迟初始化、数据传输对象、在视图中打开会话,是否有共识方法?

    对于典型的 Web 3 层应用程序 您认为以下设计存在哪些缺陷 以及您理想的架构建议是什么 我目前的蓝图方法非常粗略 假设Java Spring Hibernate JSP 控制器 无状态 可能用只读事务包装 以避免延迟初始化异常 仅通过服
  • 首次调用 WebClient.DownloadString 大约需要 15 秒

    string url http google com index html WebClient client new WebClient Stopwatch sw new Stopwatch sw Start string text cli
  • 如何通过钥匙获取锁

    在不锁定整个集合的情况下防止并发更新键值集中一条记录的最佳方法是什么 从语义上讲 我正在寻找某种按键锁定 理想情况下是 Java 实现 但不一定 interface LockByKey void lock String key acquir
  • 如何安装com.mysql.jdbc.Driver“找不到类名的驱动程序:com.mysql.jdbc.Driver”?

    我正在设置 Atlassian Confluence 在选择数据库时 我选择 使用外部 Mysql DB 我看过一些教程 但对我来说 它并没有按照应有的方式工作 我使用 ubuntu 12 04 服务器并安装了 mysql 现在我尝试与外部
  • awk FieldWITHS 是如何工作的

    几天前我开始学习 awk 编程 有效的 awk 脚本 在第 102 页 作者解释了字段宽度 但我不明白它是如何工作的 请有人向我解释一下 fieldwidths 是如何工作的 场宽以空格分隔的字段宽度列表 设置后 gawk 将输入解析为固定
  • Vuejs 打开/切换单个项目

    我使用单个文件组件 并在其中之一中有一个列表 这个列表应该像手风琴一样工作 但据我在 Vuejs 文档中找到的 让每个项目单独打开并不那么容易 数据 问题和答案 是从 ajax 调用中检索的 我使用 jQuery 来实现这一点 但想知道如何
  • 升级到 Ninject 3.0.0-rc3 后连接字符串异常

    我最近将我的网站项目更新为 Ninject 3 0 0 rc3 之后我收到错误消息 提供的连接无效 因为它包含的映射或元数据信息不足 当我使用 2 2 0 0 版本时 所有这些都有效 知道什么会导致出现此异常以及如何解决它 我使用的是 EF
  • eclipse:覆盖config.ini中的user.name

    我有一个多用户 eclipse 3 4 安装 带有共享主配置区域 用户需要覆盖user name使用他们的全名和通常的方法 添加 Duser name 到 eclipse ini 是不合适的 因为覆盖必须是针对每个用户的 我尝试在 conf
  • 闪亮 - FILL 值未在闪亮服务器中正确传递给 ggplot - 未找到错误对象“输入”

    我正在尝试开发一个闪亮的应用程序 它将在浏览器上安装基于地图的热图 并允许您更改热图上显示的变量 该地图是具有 GIS 形状文件的地理区域 然后所选变量将作为热图显示在地图上 不幸的是我有一个问题 变量没有被传递给ggplot 正确 但我的
  • 从 Java 中的另一个类访问变量的实例

    是否可以从 Java 中的另一个类访问一个类中变量的实例 假设您在 A 类中拥有以下内容 private BlockingQueue
  • 正则表达式检查两个第一个单词是否相同

    例如 s1 Test Test the rest of string s2 Test the rest of string 我想积极匹配 s1但不是 s2 因为第一个词 s1与第二个相同 单词 Test 例如 正则表达式应该适用于任何单词
  • 如何在JS中下载浏览器(包括Firefox)中的10个以上文件

    我尝试使用以下代码一次下载多个文件 var urls for var i 0 i lt urls length i var tempLink document createElement a tempLink setAttribute hr