压缩包形式下载(包括saveAs和a标签两种)和单excel列表a标签下载

文章介绍了如何在前端使用axios、file-saver和jszip库来下载和压缩文件。通过axios获取文件Blob,利用jszip进行文件拼接和压缩,最后通过file-saver或a标签实现本地保存。同时,还展示了如何下载Excel文件,包括设置正确的文件类型和创建a标签进行下载操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说压缩包形式,saveas和a标签比较像,合在一起说,会有区分

首先要有axios和file-saver,jszip等插件 npm install axios  filter-saver  jszip下载

这个是万能公式,直接用,不墨迹

   getFile (url) {

            console.log('url',url)

      return new Promise((resolve, reject) => {

        axios({

          method: "get",

          url, // 原先后端下载单个文件的路径

          // responseType: "ArrayBuffer"  // 注意看下你自己的原先后端下载地址返回的文件格式 是blob 还是其他的啥 对应这里就要改成后端返回的下载格式

          responseType: "blob"

        })

          .then(res => {

            resolve(res.data) // 返回文件的blob   Blob {size: 151382, type: 'image/png'}

          })

          .catch(error => {

            reject(error.toString())

          })

      })

    },

我忘了引入,大家用的时候可千万不能忘::🐕

import JSZip from "jszip";

import FileSaver from "filesaver";

import axios from "axios"

然后的话就是将后端接口的文件进行拼接:

 arr.push({ fileDownUrl: 'http://oss.docuai.cn/t_cloud/v0/object2/' + item.oss_key, fileDownName: item.filename })

  const zip = new JSZip()

                const cache = {}

                const promises = []

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

                    const promise = this.getFile(item.fileDownUrl).then(data => {

                        // 下载文件, 并存成blob对象

                        const file_name = i + 1 + item.fileDownName // 获取文件名,一定要包含文件的后缀名(因为重复的文件名只会下载一个,故需要加入下标 不同名)

                        zip.file(file_name, data, { binary: true }) // 逐个添加文件

                        cache[file_name] = data

                    })

                    promises.push(promise)

                })

以上代码主要是为了定义文件名

 Promise.all(promises).then(() => {

                    zip.generateAsync({ type: "blob" }).then(content => {

                        console.log('content',content)

                        // 生成二进制流   然后保存文件(如果这个下载不了 也可以将下方这一行换成a标签下载逻辑)

                        // FileSaver.saveAs(content, new Date().toLocaleDateString() +".zip") // 利用file-saver保存文件  自定义文件名     本想着用这个的,但是不允许,因为项目node兼容性问题,不能使用过高版本的.

                        const blobUrl = window.URL.createObjectURL(content);

    // 这里的文件名根据实际情况从响应头或者url里获取

    const filename = new Date().toLocaleDateString() +'.zip';  //这个是a标签下载的方式,我的电脑不支持其他file-saver.......

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

    a.href = blobUrl;

    a.download = filename;

    a.click();

    window.URL.revokeObjectURL(blobUrl);

                    })

                })

下面说说excel下载,总的来说后端大哥那边比较逻辑比较多,我是打酱油的.....

首先是整合数据

   this.datas = {

          table_name: 'declaration report',

          sheets: [

            {

              sheet_name: 'COURIER',

              id_list: deleteDate

            }

          ]

        }

然后的话axios请求后端的接口,因为最终是后端定义excel的

 axios({

        method: 'post',

        url: '/api/data-report/export-excel',

        data: this.datas,

        responseType: 'blob',

        headers: {

          'Content-Type': 'application/json',

          'authorization': 'Bearer ' + getToken()

        }

      })

.then(res => {

        const blob = new Blob([res.data], { type: "application/vnd.ms-excel" });//这个时候要注意格式

        const fileName = 'COURIER.xlsx';//下载文件名称

        const elink = document.createElement('a');//创建a标签下载

        elink.download = fileName;//链接名字对应

        elink.style.display = 'color:red';//下载的时候让他显示红色

        elink.href = URL.createObjectURL(blob);//转换格式

        document.body.appendChild(elink);//下载

        elink.click();

        URL.revokeObjectURL(elink.href);

        document.body.removeChild(elink);

        this.$refs.multipleTable.clearSelection();

      }).finally(()=>{

        this.title=''

      this.fullscreenLoading=false

      })

finfish!!!写完博客再开始工作🐕🐕🐕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值