多文件下载含进度条可视频可图片

2023-11-05

html篇

<el-dialog title="下载进度" :visible.sync="dialogVisible">

<el-progress

v-for="(file, index) in downloadArr"

:key="index"

:percentage="file.percentage"

/>

</el-dialog>

data数据篇

 data() {
    return {
      contextMenuData: {
        axis: {
          x: null,
          y: null
        }
      },
      fill_img,
      video_img,
      directoryArr: {}, // 未分类的文件夹
      directoryTotal: "", // 文件夹的数量
      fileArr: {}, // 未分类下的文件
      fileTotal: "", // 文件下的数量
      contextMenuTarget: this.$refs.detailimg, // 可右键区域,这里也可以绑定$refs
      contextMenuVisible: false, // 右击显示出来的弹框
      visible: false, // 移动文件夹的弹弹框
      tree: false, // 文件渲染tree组件的创建与销毁
      delVisible: false, // 删除文件提示框
      delPVisibale: false,
      isshift: false, // 快捷键 shift 是否被按下
      isctrl: false, // 快捷键 ctrl 是否被按下
      currentIndex: "", // 现在选中的图片或视频
      currentArr: [], // 上方div图切是否被多选中,如果多选了就把他的id(委唯一标识,现在是index)放到这个列表里面
      fileCurrentIndex: "", // 现在选中的图片或视频
      fileCcurrentArr: [], // 上方div图切是否被多选中,如果多选了就把他的id(委唯一标识,现在是index)放到这个列表里面
      arr: [], // 多选下的资源信息(数组对象形式)
      searchInput: "", // 搜索关键词
      treeData: [], // 所有节点信息
      currenFiles: false, // 当前是否有文件夹选中
      unassortedRecord: [], // 未分类路径
      movedisabled: null, // 是否是移动文件夹
      percentage: 0, // 下载进度
      dialogVisible: false, /// 进度条显示
      downloadArr: [] // 多个下载进度(多选的时候往里push)
    };
  },

percentage: 0, // 下载进度

dialogVisible: false, /// 进度条显示

downloadArr: [] // 多个下载进度(多选的时候往里push)

选中文件夹

 // 单个选中的文件
    changeIndex(item, index) {
      try {
        this.currentIndex = index; // 新家的
        this.currenFiles = false;
        this.fileCurrentIndex = "";
        this.movedisabled = true;
        this.contextMenuVisible = false;
        this.downloadArr = [];
        this.setIsFile(false);
        if (this.isctrl || this.isshift) {
          if (this.currentArr.includes(index)) {
            this.currentArr = this.currentArr.filter(cr => cr !== index);
          } else {
            this.currentArr.push(index);
          }
          // 先查传进来的数据多选下的数组里有没有coskey(未分类情况)
          if (this.$route.path === "/unassorted") {
            const unassortedExist = this.arr.find(i => i.cosKey == item.cosKey);
            // console.log(unassortedExist, "有吗");
            if (unassortedExist) {
              this.arr = this.arr.filter(
                ex => ex.cosKey !== unassortedExist.cosKey
              );
            } else {
              this.arr.push(item);
            }
          }
          console.log(this.$route.path, "path");
          // 先查传进来的数据多选下的数组里有没有相同的id(文件情况)
          if (this.$route.path === "/home" || this.$route.path === "/notag") {
            console.log(this.arr, "错误的文件夹");
            const fileExist = this.arr.find(i => i.id === item.id);
            console.log(fileExist, "fileExist");
            if (fileExist) {
              this.arr = this.arr.filter(ex => ex.id !== fileExist.id);
            } else {
              this.arr.push(item);
              console.log(this.arr, "新数组");
            }
          }
        } else {
          this.currentArr = [];
          this.currentArr.push(index);
          this.arr = [];
          this.arr.push(item);
        }

        if (
          this.$route.path === "/home" ||
          this.$route.path === "/search" ||
          this.$route.path === "/notag"
        ) {
          const id = (this.arr || []).map(item => item.id);
          // 获取资源详情
          reqMaterialDetail(id.join(",")).then(res => {
            console.log(res, "res");
            this.setPresentmsg([res.data]);
          });
        } else {
          this.setPresentmsg(this.arr);
        }
      } catch (e) {
        console.log(e);
      }
    },

页面调用导出方法(实际场景)

derive() {

// console.log(this.currentArr, '选中的图片下标数组');

// console.log(this.currentIndex, '选中的图片下标');

// if (!this.currentArr.length) {

// console.log(this.fileArr[this.currentIndex].filePath, '图片地址 ');

// downloadImage(

// this.fileArr[this.currentIndex].filePath,

// `${this.currentIndex}个图片`

// );

// }

// console.log('道出了寂寞?');

// this.currentArr.forEach((item) => {

// downloadImage(this.fileArr[item], `${item}个图片`);

// });

// 导出文件时

if (this.currentIndex !== "") {

const arr = this.currentArr;

// 如果数组里有多个下标就是多文件下载

// const current = this.fileArr[this.currentIndex];

// const { title, downFilePath } = current;

if (arr.length > 1) {

arr.forEach((item, index) => {

const current = this.fileArr[item];

console.log(current, "current");

const title = `${current.title}.${current.extension}`;

this.downloadArr.push({

...current,

percentage: 0

});

this.download(current.downFilePath, title, index);

});

} else {

const current = this.fileArr[this.currentIndex];

console.log(current, "ccccc");

const title = `${current.title}.${current.extension}`;

const { downFilePath } = current;

this.downloadArr.push({

...current,

percentage: 0

});

this.download(downFilePath, title, 0);

}

}

},

下载进度实现代码

download(url, name, index) {

this.dialogVisible = true;

Axios.get(url, {

responseType: "blob",

onDownloadProgress: event => {

this.downloadArr[index].percentage =

(event.loaded / event.total).toFixed(2) * 100;

}

}).then(res => {

const data = res.data;

console.log(res, "res");

const a = document.createElement("a");

const blob = new Blob([data]);

const url = window.URL.createObjectURL(blob);

a.href = url;

a.download = name;

a.click();

window.URL.revokeObjectURL(url);

this.dialogVisible = false;

setTimeout(() => {

// this.downloadArr = [];// 放到选中单个的时候清空了

}, 300);

});

}

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

多文件下载含进度条可视频可图片 的相关文章

  • 如何判断何时创建新组件?

    我一直在寻找背后的逻辑当有人在 AngularJS Angular 上的 Web 应用程序中创建新组件时但我认为这更通用 可能适用于所有基于组件的前端框架 我知道有像这样的一些原则应该是抽象的和可重用的但例如我在角度文档中看到 每个单独的路
  • 使用组合 API 和 TypeScript 类型系统强类型化 vue 组件的 props

    我正在使用 vue 组合 api 和 typescript 如何使用打字稿输入系统强类型化组件属性 特洛伊 凯西尔的回答并不完全准确 我引用的文档definecomponent https vue composition api rfc n
  • 访问 nuxt 配置文件中的存储

    我想添加通过 Nuxt 静态生成的动态路由 我定义了一个客户端 服务器端存储asyncData方法 我想将这个存储值 一个数组 映射到我的nuxt config js文件使其成为 动态 静态 路线图nuxt generate命令 但如何访问
  • 我可以动态创建/销毁 Vue 组件吗?

    因此 我正在创建一个相当复杂的 Vue 应用程序 它从后端 API 获取数据并将其显示在前端 具体取决于用户选择的过滤器 它的默认设置是立即显示所有内容 然后一旦用户选择过滤器 它就会拉出不具有这些属性的 卡片 组件 直到今天 一切都很顺利
  • vue-test-utils:如何测试 Mounted() 生命周期挂钩中的逻辑(使用 vuex)?

    我正在尝试为 Vue 中的逻辑编写一个单元测试mounted 生命周期钩子 但运气不太好 问题似乎是这样的mounted 使用 vue test utils 安装组件时永远不会被调用mount 这是我要测试的 Vue 组件
  • 监听来自动态vue组件的事件

    您将如何侦听动态创建的组件实例发出的事件 在示例中 顶部组件添加到 DOM 中 而第二个组件是在 javascript 中动态创建的 Vue component button counter data function return cou
  • 如何切换各个
  • 元素的类?
  • 当我切换变量时active在下面的代码中 activeCSS 类应用于列表中的所有元素 从列表中的所有元素中删除 如何单独定位列表元素 Todo List 示例具有类似的功能 待办事项 待办事项已完成 但它有点超出了我的技能范围 ul li
  • 如何从顺序键盘导航中删除 Vuetify 附加图标

    在带有 Vuetify 的 Vue js 应用程序中 我有一组用v text field并且其中有一个append icon为了切换文本可见性 如下所示
  • 使用 nuxt/content 显示从数据库获取的 markdown

    我在我的应用程序中使用 nuxt content 它工作正常 在应用程序的另一部分 我想从数据库中获取一些降价并显示它 let mytext Some markdown fetched from a db here
  • 如何在 Vue.js 2 中使用事件总线通过自定义事件传递数据

    我在用着Vue js 2 5 x 在我的玩具项目中 我实现了一个事件总线 类似于所示的here https alligator io vuejs global event bus 事件总线在 Vue 原型中全局注册为 eventBus 然后
  • 无法通过 Vue.js 从 Laravel 后端下载文件 (pdf)(Axios 帖子)

    我在 Vue 中有一个多步骤表单 一旦收集到所有信息 我就会将结果发布到 Laravel 控制器 这是网站的经过验证的区域 我正在使用护照 所以本质上我有一个 Vue SPA 它是在 Laravel 5 7 框架内构建的网站的管理区域 Vu
  • vuejs 模板和 asp.net 部分视图,好的做法吗?

    我在网站中使用 Vue js 并将模板添加到 html 代码中 并将 js 代码添加到单个 js 文件中 所以我不想使用 vue Vuefy Browserfy 方法 而是稍后捆绑并缩小我的 js 文件 由于我必须使用 Asp Net MV
  • 在 Vue.js 2 中将 props 作为初始数据传递的正确方法是什么?

    所以我想将 props 传递给 Vue 组件 但我希望这些 props 将来会从该组件内部发生变化 例如当我使用 AJAX 从内部更新该 Vue 组件时 所以它们仅用于组件的初始化 My cars listVue 组件元素 我将具有初始属性
  • 在Vue.js 3中添加全局变量

    如何在 Vue js 3 中添加全局变量 在 Vue js 2 中 我们在main js file Vue prototype myGlobalVariable globalVariable 最直接的替换就是app config globa
  • 如何使用 vue 观察对象数组中的特定属性

    我正在使用 vue js 2 5 2 我有一个对象数组 我想观察 forms selected 如果它发生变化 则调用一个函数 这是我的尝试 但显然这是不正确的 我尝试将数组放入 for 循环中以观察所选的每个对象的属性 watch for
  • 如何在 NuxtJs 路由中使用 *(星号)?

    在 vue cli 生成的普通 Vue 不是 Nuxt 项目中 使用 在 vue router 中这样工作 export default new Router routes path about name about component A
  • 在 vuejs 上将 \n 替换为新行

    我正在尝试将 n 字符替换为来自端点的数据的新行 I tried p item licensedocument legal documentText replace r n r n g br p 并没有奏效 当我将replace 写入问题末
  • Vue: vue-i18n: 无法翻译 keypath 的值,使用 keypath 的值作为默认值

    我正在使用 Vue 我想展示三种语言 英语 他加禄语和宿务语 现在我有错误 无法转换键路径 NavbarMobile home 的值 使用 keypath 的值作为默认值 我通过 console log this i18n locale 检
  • 如何减少 WEBPACK + VUEJS 中的包大小

    我遵循了很多有关如何减小捆绑包大小的教程 但没有任何内容对捆绑包大小产生任何影响 我不知道为什么 每次当我向 webpack 添加一些新代码时 我的包大小都保持与以前相同 我的应用程序是使用 vue cli 3 pwa 插件 webpack
  • 在 Vue.js 2.0 中实现 v-model 格式化的正确方法是什么

    举个简单的例子 输入货币数据的文本框 要求是以 1 234 567 格式显示用户输入并删除小数点 我尝试过 vue 指令 当 UI 由于其他控件而刷新时 不会调用指令的 update 方法 因此文本框中的值将恢复为没有任何格式的值 我还尝试

随机推荐

  • 不确定性

    不确定性产生的原因 信息不完全 来源不一致 表述不精确 内容具有变化性等 不确定性可以是某个量 某种结构等 涉及到的概念 1 概率的本质 概率就是一个理论上无限次的试验序列的属性 而不是单一事件的属性 在试验总体未知的情况下 或者没有充足的
  • 【915程序设计】18西交大软件专硕915程序设计真题讲解

    1 数字统计 include
  • 主板bios开启虚拟化支持

    Inter和AMD生产的主流CPU都支持虚拟化技术 但很多电脑或主板BIOS出厂时默认禁用虚拟化技术 某些比较老的CPU是不支持虚拟化技术 要确定其电脑CPU是否支持虚拟化技术 可以在 5分享 镜像 虚拟机下载检测工具 1 打开虚拟化检测工
  • C语言规范总结一:代码编写规范

    目录 代码换行 缩进 使用 空格使用 空行的使用 注释的使用 goto的使用 使用 switch的使用 代码移植 修改 代码换行 1 满120 换行 2 逗号 操作符后换行 3 换行与与上一行对应级别对其 缩进 函数 结构体 枚举 逻辑语句
  • 第39步 深度学习图像识别:Inception V3建模(Tensorflow)

    基于WIN10的64位系统演示 一 写在前面 1 Inception V1 Inception是一种深度学习模型 也被称为GoogLeNet 因为它是由Google的研究人员开发的 Inception模型的主要特点是它的 网络中的网络 结构
  • STM32 —— FreeModbus 从机移植,基于 Modbus 协议读取从机温度(AHT20)

    STM32 FreeModbus 从机移植 基于 Modbus 协议读取从机温度 AHT20 实验目的 用stm32最小核心板 AHT20模块 完成一个 modbus接口的温湿度Slave设备 能够让上位机PC通过modbus协议获取温湿度
  • EasySysprep5系统封装教程

    Easy Sysprep 是一款用于 Windows 操作系统系统部署专业工具 使用人群主要是企业的系统工程师和系统技术爱好者 与 自由天空驱动包 结合成整套成熟可靠系统部署解决方案 这套解决方案可以提高 Windows 的部署效率 降低技
  • Python 一招搞定禅道提交bug

    欢迎关注 无量测试之道 公众号 回复 领取资源 Python编程学习资源干货 Python Appium框架APP的UI自动化 Python Selenium框架Web的UI自动化 Python Unittest框架API自动化 资源和代码
  • 暑假补卷6——Linux线程

    上课笔记 需整理 线程互斥 mythread cc include
  • 使用命令启动springBoot的可执行jar时, 报demo.1.0-SNAPSHOT.jar中没有主清单属性解决方法

  • 正态分布图_正态QQ图(BIO100B)

    QQ图是一种散点图 对应于正态分布的QQ图 就是由标准正态分布的分位数为横坐标 样本值为纵坐标的散点图 其他版本 2 有将 x m std 作为纵坐标 那么正态分布得到的散点图是直线 y x 要利用QQ图鉴别样本数据是否近似于正态分布 只需
  • Mysql生成数据字典

    实现原理 在MySQL中 有个自带的数据库 名为information schema 其中保存着关于MySQL服务器所维护的所有其他数据库的信息 如数据库名 数据库的表 表栏的数据类型与访问权 限等 我们通过查询这个数据库的COLUMNS表
  • [MySQL]去掉字符串两边的双引号

    select TRIM BOTH FROM username from table
  • 导入导出操作vue

    导出的时候可以导出table某一行的详情数据 也可以导出整个表格 导入的时候相当于新增操作
  • FASTADMIN框架避坑指南

    框架都有一个通病 就是基础基础功能用起来都很快 但是稍微复杂一点的你就要开始翻文档了 可能文档还没有 社区也没有人回答 既然用了 就记录下遇到的问题 不定期更新 1 列表自定义按钮 先上一段代码 操作按钮 field operate tit
  • 西门子PLC S7-300系列的PID控制器参数整定的一般方法分享

    西门子PLC S7 300系列的模块配置灵活 扩展性强 通讯功能强大 为自动化控制系统提供了解决方案 西门子PLC S7 300的编程软件是STEP7 V5 5 在编程软件中 用户可以通过PID功能块实现PID控制 本文下面为您介绍一下西门
  • Qt的动态内存回收问题(1)

    Qt的动态内存回收机制容易让人觉得困惑 而能够参考的相关资料又很少 不少都是对此一笔带过 或者给出错误的说明 费了不少劲 了解到了一些皮毛 前言 程序开始时 最好先把指向动态内存的指针赋值为NULL 在delete这些变量的时候 也将指针赋
  • java servlet 获取请request的IP地址

    本文转载至 http blog csdn net g893465244 article details 40828513 基本逻辑 先取得配置的IP列表 然后通过request getRemoteAddr 取得客户端的IP地址 做鉴权和校
  • 鼎信通讯2023届提前批一面技术面

    问题 介绍自己 您好面试官 我叫张 哪里人 班级排名 四六级成绩 手上有没有offer 目前没有 有两家公司在谈 还没发书面Offer 如果你手里有Offer 可以坦诚说大体信息 比如 我目前手里有两个Offer 但是我更倾向加入咱们公司
  • 多文件下载含进度条可视频可图片

    html篇