当前位置: 首页 > 知识库问答 >
问题:

前端 - 网页端下载时能不能同时下载多个资源,而且这些资源放置在同一个目录内?

傅俊德
2024-12-12

大概就是点击一个按钮,然后弹出一个目录选择器,但是该按钮可以触发多个资源的下载,这些资源都放置在同一个目录下。

共有4个答案

鱼宜
2024-12-12

这种需求一般都需要把所有资源打包成一个zip文件,就能实现再同一个目录下了,这个步骤一般是由服务端操作, 前端也行不过很少弄

npm install jszip
npm install file-saver


import axios from 'axios'
import JSZip from "jszip";
import FileSaver from "file-saver";



videoData:['/video/26519f026fc012521605563015227403.mp4','/video/f7b9cdae14ad51e491b62742f71c43e7.mp4','/video/1f82d79e0a9ef414419275a5f1d6bb94.mp4'],
 
 
 
download1(){
        var videoData = this.videoData;
        const zip = new JSZip();
        var promises = [];
        videoData.forEach(item => {
          const promise = this.getFile(item).then(data => {
            const arr_name = item.split("/");
            const file_name = arr_name[arr_name.length - 1]; // 获取文件名
            console.log(data)
            zip.file(file_name, data, { binary: true });
          });
          promises.push(promise);
        });
        Promise.all(promises).then(() => {
          console.log("全部下载完成");
          zip.generateAsync({ type: "blob" }).then(content => {
            // 生成二进制流
            console.log("生成压缩包");
            FileSaver.saveAs(content, "时间戳.zip");
          });
        });
      },
      getFile(url){
        return new Promise((resolve, reject) => {
          axios({
            method: "get",
            url:url,
            responseType: "blob"
          })
            .then(data => {
              resolve(data.data);
            })
            .catch(error => {
              reject(error.toString());
            });
        });
      },
翟淇
2024-12-12

最佳的方案是通过服务器先将这些文件打包成一个 .zip 文件,然后让浏览器只下载这一个文件。

公孙宏畅
2024-12-12

File System Api 应该可以满足你的需求。

https://developer.mozilla.org/zh-CN/docs/Web/API/File_System_API

萧麒
2024-12-12

问题分析

1. 能不能同时下载多个资源

我们来思考一下 下载 的流程。
每次下载的时候,其实最终的行为都是 前端 向浏览器申请,然后 浏览器用户 进行确认之后,才能开始下载。所以如果前端想要控制这个流程,感觉只有两个思路:

  • 循环下载文件(这样可能会导致用户频繁点击确认,并不能让用户无感,否则可能会有安全问题)
  • 打包下载文件(像钉钉邮箱一样,由后台进行打包)

2. 下载到同一个目录

同理,由于安全角度考虑,文件下载的位置完全由 浏览器 通过 用户设置 决定,所以客户端理论上都没有办法指定下载位置。

总结

所以由于浏览器安全策略限制,应该是没有办法实现题主的需求。可以通过 循环列表多次下载打包后单次下载 两种变通方式实现,需要看业务方、产品能不能同意。

 类似资料:
  • JSSDK 名称 描述 下载地址 JSSDK JSSDK的包 下载地址 WPSDK WPSDK的包 下载地址 各大平台示例程序 名称 描述 下载地址 PHP PHP示例程序 下载地址 .NET .NET示例程序 敬请期待 JAVA JAVA示例程序 敬请期待

  • 我们会在这里为您提供一些跟uView UI设计相关的资源和设计工具的下载,更多设计资源正在整理和完善中。 设计资源 这里我们提供组件的Sketch和Axure设计资源,您可以根据需要进行下载。 Sketch Template 通过在Sketch中导入uView组件库,可以在交互设计阶段方便地调用常用的组件下载 Axure Template 通过在Axure中导入uView组件库,可以在交互设计阶段

  • 为方便设计开发,我们提供了基础UI 控件,以及部分品类示例内容页的设计资源源文件,目前提供sketch格式,可供设计开发参考。

  • 问题内容: 我正在用NodeJS编写应用程序。 我在同一目录中有两个文件,但是每当我调用其中一个时: 从我的index.html加载资源失败错误。 谢谢! 问题答案: 要使用Express提供静态文件,您应该使用或以其他方式为每个拥有的html文件定义一个新路径,或者重新发明所提供的功能。 您可以执行以下操作: 将您的文件放在子目录中。例如: 文件将每2秒重定向一次。 您可以从GitHub下载此示

  • 我不知道为什么会这样,但真的很烦人。我希望该文件是根据express docs下载的。我有下一个代码: 文件夹结构: 没有发生任何事情,错误未显示。有什么想法吗?

  • 当我把我的log4j2.xml放在资源/xml文件夹下时,我得到以下错误:ERROR StatusLogger找不到log4j2配置文件。使用默认配置:仅将错误记录到控制台。 当我把它直接放在资源下面时。xml,它可以完美地工作。我还在Run-As下给出了-Dlog4j.configurationFile=src/main/resources/xml/log4j2.xml- 我还发现了这个错误lo

  • 问题内容: 当Django启动时,如何从mysql数据库加载资源并将其放入内存(Redis)中,以供所有应用程序使用。 我已经看到了这个 [https://docs.djangoproject.com/en/dev/ref/applications/#django.apps.AppConfig.ready] 但是他们提到在ready函数中不使用db连接。我的网站启动时该怎么办? 我还可以在read