首页 > 其他分享 >vue 批量下载通用方法【转载】

vue 批量下载通用方法【转载】

时间:2023-07-12 11:24:29浏览次数:30  
标签:文件 vue 批量 zip item file 转载 data 下载

自己做项目的时候遇到需要批量下载文件的需求,于是下意识就用了循环url地址数组创建a标签下载的方法,但浏览器有限制,超过10个文件将不能下载,最多下载10个。于是找遍网上文章,终于找到了适用的。在这记录一下,分享给需要的人

首先需要用到两个插件

file-saver 和 jszip

在需要批量下载功能的vue文件中引入

import { saveAs } from 'file-saver'
import JSZip from 'jszip'

我的项目的文件是存放在阿里云oss里 所以我这边是直接就有url地址数据

先声明获取文件的函数

download(href) {
            return new Promise((resolve, reject) => {
                this.$axios({
                    method:'get',
                    url: href,
                    responseType: 'arraybuffer'
                }).then(data => {
                    resolve(data.data)
                }).catch(error => {
                    reject(error.toString())
                })
            })
        }

然后声明下载按钮所绑定的函数

downClick(){
    const zip = new JSZip()
    const cache = {}
    const promises = []
    //companyAttachmentsList是我自己的附件url地址数组 你可以改成你的数组
    companyAttachmentsList.forEach(item => {
//item.downloadLink.split('?')[0] 处理companyAttachmentsList里的url地址 去除?号和后面的字符串
        const promise = this.download(item.downloadLink.split('?')[0]).then(data => { // 下载文件, 并存成ArrayBuffer对象
//item.fileName companyAttachmentsList里的文件名
              zip.file(item.fileName, data, { binary: true }) // 逐个添加文件
                  cache[item.fileName] = data //可要可不要 用来打印查检查添加了那些文件
              })
              promises.push(promise) //加到promises队列里
     })
     Promise.all(promises).then(() => { //异步队列全部完成时 执行下面代码
        zip.generateAsync({type:"blob"}).then(content => { // 生成二进制流
            saveAs(content, "打包下载.zip") // 利用file-saver保存文件
        })
     })
 
}

然后把downClick 绑定到按钮上点击就可以批量下载了

注意:打包好的zip文件中,会自动去重 zip.file()传入的文件名参数如果相同,不会重复添加。例如如果有10个文件,其中3个重名, 那么zip文件里只有7个文件 ,不会重复打包如果想全部下载,建议文件名传入时加个index下标尾缀 例:原文件名 + '_' + index

标签:文件,vue,批量,zip,item,file,转载,data,下载
From: https://www.cnblogs.com/ysx215/p/17547019.html

相关文章

  • 多个vue-cli版本共存
    1.安装指定版本 2.改名 3.配置环境变量 ......
  • nginx部署vue网站
    1.背景        最近gpt很火,于是尝试用gpt来进行古诗词取名,做了一个vue的网站进行展示,第一次部署,踩了一些坑。2.实施nodejs安装:在任意目录执行如下命令进行安装包下载:wgethttps://npm.taobao.org/mirrors/node/v14.17.6/node-v14.17.6-linux-x64.tar.gz解压 tar......
  • 2023-07-12 vue this.$set设置子组件内的值无效(uniapp+vue)
    前言:怎么说呢,子组件内嵌套了多层对象和数组,业务逻辑也是在子组件内处理,如何修改多层嵌套的对象数组的值?vue提供了一个this.$set方法去改变对应的值,实测在uniapp打包的微信小程序中无法使用该方法,而在Android端则可以,那有没有两全其美的方法?答案是有,在修改深层次的值时可以通过先......
  • 转载:PageOffice既保存Word文件中指定区域的数据又保存整篇文件
    一、首先在word文件中给需要在后台获取数据的区域设置以PO_开头的书签。二、通过pageoffice在线打开文件并编辑保存。有两种打开文件的模式1、普通编辑模式(docNormalEdit)普通编辑模式就是简单的打开文件,分别设置SaveDataPage保存数据的方法和SaveFilePage保存文件的方法即可......
  • [GPT] 对于一个复杂的html文档而言,如何用 js 批量替换页面上的某些文字从A替换为B,前提
     原生:示例代码functionreplaceTextInDocument(node){if(node.nodeType===Node.TEXT_NODE){node.textContent=node.textContent.replace(/A/g,'B');}elseif(node.nodeType===Node.ELEMENT_NODE){for(vari=0;i<node.childNode......
  • mybatisPlus 中设置批量更新执行耗时
    设置myBatisPlus中使用批量更新执行的时间耗时短在连接mysql的url后添加&rewriteBatchedStatements=true为什么默认不给这个rewriteBatchedStatements属性设置为true,原来有如下原因:看下executeBatchedInserts究竟干了什么:如果批量语句中的某些语句失败,则默认重......
  • vue学习——vue实例与组件
     vc不是通用的称呼,官方的说法是组件实例对象 组件实例的原型对象的原型对象是vue的原型对象 ......
  • 使用whisper批量生成字幕(whisper.cpp)
    前言最近发现了whisper这个语音生成字幕的本地工具,但是whisper速度不算快,然后在github上发现了whisper.cpp这个项目,执行速度更快,还可以在命令行使用,这样就可以自己定制了。命令行压缩包下载命令行下载地址:https://github.com/Const-me/Whisper/releases下载【cli.zip】,解压即......
  • 18:vue3 异步加载
    在大型项目中,我们可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件。Vue提供了 defineAsyncComponent 方法来实现此功能: 1<template>2<h3>异步加载</h3>3<KeepAlive>4<component:is="tabComponent"></component>5</KeepAlive>......
  • vue2基础 入门vue2
    vue基础vue项目搭建vue单文件组件mustach表达式vue指令methods方法filters过滤器computed计算属性watch监听器vue组件vue-router路由vue生命周期vue组件通信slot插槽vuex状态管理前言vuejs是一个构建数据驱动的渐进式MVVM框架......