JS下载多个文件

2023-12-01

我的目标是有一个脚本来下载给定数组内的所有文件:

    var links = ['http://file-examples.com/wp-content/uploads/2017/10/file_example_JPG_100kB.jpg',
'http://file-examples.com/wp-content/uploads/2017/10/file_example_TIFF_1MB.tiff'];

function downloadAll(urls) {
  var link = document.createElement('a');
  link.setAttribute('download', null);
  link.style.display = 'none';
  document.body.appendChild(link);
  for (var i = 0; i < urls.length; i++) {
    link.setAttribute('href', urls[i]);
    link.click();
  }
  document.body.removeChild(link);
}
downloadAll(window.links)

在(我相信)最新的 chrome 更新之前,一切都很顺利。

我一直在收集信息,但似乎还没有可用的修复方法。

有人可以帮忙吗?基本上希望有一个在 JS 中工作的多文件下载脚本。

先谢谢您的帮助!


Using 文件系统访问API,我们可以实现相同的目标。

async function DownloadFiles(paramToFiles) {
   try {
       var dirHandle = await window.showDirectoryPicker({
           startIn: 'videos',//default folder
           mode: 'readwrite'//ask for write permission
       });//move script from function startDownload to here, because of an error "SecurityError: Failed to execute 'showDirectoryPicker' on 'Window': Must be handling a user gesture to show a file picker.". It was working on localhost.
       for (var index in paramToFiles.Files) {
          var file = paramToFiles.Files[index];
          const fileHandle = await dirHandle.getFileHandle(file.FileName, { create: true });
          if (await verifyPermission(fileHandle, true)) {
              const writable = await fileHandle.createWritable();
              await writable.write(await getBlob(file.URL));
              await writable.close();
          }
      }
   }
   catch (error) {
       alert(error);
   }
   return false;
}
async function startDownload(dirHandle, paramToFiles) {
   //move above
}
async function verifyPermission(fileHandle, readWrite) {
   const options = {};
   if (readWrite) {
       options.mode = 'readwrite';
   }
   if ((await fileHandle.queryPermission(options)) === 'granted') {
       return true;
   }
   if ((await fileHandle.requestPermission(options)) === 'granted') {
       return true;
   }
   return false;
}
function getBlob(urlToGet) {
   const blob = fetch(urlToGet).then(data => data.blob());
   return blob;
}

你可以这样称呼它。

<script>
   function doDownload() {
      DownloadFiles({
         'Files': [
            {
               'FileName': 'Download-Nih-01.zip',
               'URL': '/Download/Download-Nih-01.zip'
            },
            {
               'FileName': 'Download-Nih-02.zip',
               'URL': '/Download/Download-Nih-02.zip'
            },
            {
               'FileName': 'Download-Nih-03.zip',
               'URL': '/Download/Download-Nih-03.zip'
            }
         ]
      });
   ​}
   ​const butDow = document.getElementById('doDownload');
   ​butDow.addEventListener('click', async () => doDownload())
​</script>

关于此实现,需要注意以下几点:

  1. 这只适用于您的网站使用 HTTPS 的情况,如果您尝试使用 HTTP 访问它,则会抛出错误类型错误:window.showDirectoryPicker 不是函数.
  2. 这是实验性的,因此预计未来的行为会发生变化。
  3. 用户必须在执行此脚本之前执行操作(例如:单击按钮),并确保该操作不会回发。

这是我用来测试的按钮声明。

<button type="button" id="doDownload">Download</button>

截至撰写本文时(2021 年 8 月 18 日),该 API 受 chrome、edge 和 opera 支持。 我已经使用 ms Edge (chromium) 及其工作原理对其进行了测试。

ref: https://developer.mozilla.org/en-US/docs/Web/API/Window/showDirectoryPicker

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS下载多个文件 的相关文章

  • 由于 apollo-client 未定义,无法解构 GraphQL 查询?

    我正在寻找调试与错误消息相关的问题 未捕获的类型错误 无法解构 0 apollo client WEBPACK IMPORTED MODULE 4 useQuery 因为它未定义 Context 我正在为我的 React js 项目设置后端
  • 将鼠标悬停时的鼠标光标更改为锚状样式

    如果我将鼠标悬停在div鼠标光标将更改为 HTML 锚点中的光标 我怎样才能做到这一点 假设你的div has an id myDiv 将以下内容添加到您的 CSS 中 这cursor pointer指定光标应与用于锚点 超链接 的手形图标
  • 如何修改每个JSON对象javascript

    我想修改里面的每个 JSON 值cooldown object cooldown user 1 This user2 0 This 在 Javascript 中使用 for 语句 我研究了好几个小时 只找到了内部的 blocks Edit
  • Three.js:缩放几何图形后错误的 BoundingBox

    在我的场景中 我有一个简单的立方体 var test new THREE Mesh new THREE CubeGeometry 10 10 10 new THREE MeshBasicMaterial scene add test 该立方
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • 检查 jQuery 1.7 中是否存在基于文本的选择选项

    所以我有以下 HTML 片段
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • 可以设置标题样式吗? (并且使用CSS或js?)[重复]

    这个问题在这里已经有答案了 我想知道是否可以设计一个title a href title This is a title Hello a 样式问题有两个方面 文本格式 编码 我猜这是可能的 所以在问题中这样做 工具提示样式 你能把它弄大一点
  • Javascript 假值(null、未定义、false、空字符串:“”或 '' 和 0)和比较(==)运算符 [重复]

    这个问题在这里已经有答案了 当我使用任何一个值时 null undefined false 0 in a if陈述 它总是被评估为谬误 false 另外 这些值的否定 null undefined false 0 in a if语句总是被评
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • 如何用另一个响应替换窗口的 URL 哈希?

    我正在尝试使用替换方法更改哈希 URL document location hash 但它不起作用 function var anchor document location hash this returns me a string va
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • 在 CKEditor 中设置字体大小和字体系列

    我正在使用 ckeditor 我想问一下这个插件如何设置font family和font size 我尝试过使用 CKEDITOR config font defaultLabel Arial CKEDITOR config fontSiz
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro

随机推荐

  • 如何在java中将UTF-16转换为UTF-32?

    我一直在寻找解决方案 但似乎没有太多关于这个主题的内容 我找到了建议的解决方案 String unicodeString new String utf8 here byte bytes String getBytes UTF8 String
  • beforeRequest事件jqGrid:在调用url之前设置jqGrid页面

    我试图在对 URL 的 GET 请求之前设置 jqGrid 中的页面变量 jQuery frTable jqGrid cmTemplate sortable false caption TempData POPNAME Population
  • Rust OpenTelemetry OTLP 带 Honeycomb

    我正在尝试使用opentelemetry and open telemetry otlp通过 OTLP 向 Honeycomb 提供可观测性数据 我使用这样的东西作为概念证明 如果你想运行它 可以将其提取到此存储库中 https githu
  • 使列表不可变[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的不可变列表 是否可以使列表不可变 您可以使用ReadOnlyCollection
  • 表单提交无需刷新页面

    有人可以告诉我使用教程吗jquery显示表单提交成功 无需刷新页面 当邮件发送时 gmail 上会发生类似的情况 黄色叠加层显示您的邮件已发送 然后淡出 我希望根据表单提交的结果显示消息 好的 类似这样的 但我没有尝试 所以像教程一样使用它
  • 为什么@EnableWs从spring bean中删除aop代理

    我正在尝试在我的 Spring Boot Web 服务项目中添加自定义拦截器 我跟随this示例并创建了此配置 package org example import java util List import org aspect Pers
  • 如何更改列的标识增量

    以下语句可以重置种子 DBCC CHECKIDENT 表名 RESEED 1 但这次我必须改变它的增量 或者您可以使用 Sql Server Management Studio 使用这种方法很可能会重新创建该表
  • Java中如何计算HashMap内存使用量?

    我在面试中被要求计算内存使用情况HashMap如果其中有 200 万个项目 预计会消耗多少内存 例如 Map
  • Java SSLSocket:如何发送完整的服务器证书链?

    当我在 Java 7 中创建 SSLServerSocket 时 服务器正确使用我的服务器证书和密钥 该证书是由 ca 的子 ca 颁发的 因此 从根证书到服务器证书的完整链有四个证书 完整的链存在于密钥库 信任库中 但是 当客户端连接时
  • 如何更改SysDateTimePick32或CDateTimeCtrl的背景颜色?

    我似乎无法更改背景颜色SysDateTimePick32控制 在本例中为白色 在我的 Win32 MFC 应用程序中 我首先尝试覆盖OnCtlColor父窗口中的通知消息 甚至没有被调用 然后我尝试了子类化方法此处描述 这被称为正常 但控件
  • 变量数量与参数数量不匹配 - 是的,它们匹配

    因此 根据建议 我试图包含准备好的陈述 但 PHP 不接受我的代码 stmt link gt prepare SELECT COUNT FROM table WHERE company CONVERT utf8 USING latin1 C
  • 如何处理动画+自动容器大小

    我有这个动画 我想自动调整它的大小以适应内容 标题总是随着白天和用户的变化而变化 我想避免标题容器使用 100 的可用空间来进行进一步的动画 对于所有自动属性 标题只会在 2 5 秒后弹出 那么我该如何处理这个问题呢 typewriter
  • 将上传的文件保存在特定位置

    我有以下代码来处理服务器上的文件上传 但是如何将文件保存到服务器上的特定位置 import gwtupload server UploadAction import gwtupload server exceptions UploadAct
  • 启动HBASE,java.lang.ClassNotFoundException:org.apache.htrace.SamplerBuilder

    我尝试使用 start hbase sh 启动 HBASE 但是出现错误 java lang ClassNotFoundException org apache htrace SamplerBuilder 我尝试过添加各种 jar到各个文件
  • 哪里可以获得简单的 Boost 线程管理示例?

    所以我有一个简单的cpp文件 只有一个具有 1 个主函数和 3 个 int a la 公共变量 喜欢 int a int b int c void main startThredA startThredB while 1 c a b pri
  • PHP 5.4.17 替代“... 运算符”

    我想知道是否有人知道 PHP 5 6 x 及更高版本的替代方案 运算符 或 splat 运算符 我相信它被称为 我目前在 PHP 7 版本中所做的是 this gt callAction explode this gt routes aut
  • 工厂创建相同接口的不同对象

    我有1个接口 public interface ISummary int EventId get set 还有许多实现该接口的具体类 public class EmployeeSummary ISummary public int Even
  • 为什么 TRUE == "TRUE" 在 R 中是 TRUE?

    Why TRUE TRUE is TRUE in R 有没有等价的 in R Update 这些都在回归FALSE TRUE True TRUE true TRUE T 唯一的TRUE值为TRUE TRUE 如果检查identical 一切
  • 对于程序的不同运行,全局变量的地址是否相同?

    考虑以下代码片段 int i 10 int main cout lt lt i 一旦为程序生成了 exe 程序不同运行的输出是否相同 假设操作系统支持虚拟内存 编辑 这个问题特定于存储在数据段中的全局变量 由于这是第一个全局变量 因此地址应
  • JS下载多个文件

    我的目标是有一个脚本来下载给定数组内的所有文件 var links http file examples com wp content uploads 2017 10 file example JPG 100kB jpg http file