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

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

阅读 834
4 个回答

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

这种需求一般都需要把所有资源打包成一个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());
            });
        });
      },
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏