打包下载(批量下载)

打包插件:
npm i --save jszip
npm i --save file-saver
调用:
@click="batchDownload()"
功能区:
// 下载打包功能
batchDownload () {
  const selectedRowKeys = this.dataListSelections
  if (!selectedRowKeys.length) {
    this.$message.warning('请先选择要下载的文件~')
    return
  }
  const zip = new JSZip()
  const cache = {}
  const promiseList = []

  this.batchDownloadLoading = true

  for (const item of selectedRowKeys) {
    const path = `/sys/file/${item.file_id}?jwt=${this.tokenNoBearer}&clientId=${this.clientId}`
    const promise = this.getImgArrayBuffer(path).then(data => {
      // 下载文件, 并存成ArrayBuffer对象(blob)
      zip.file(item.file_name, data, { binary: true }) // 逐个添加文件
      cache[item.name] = data
    })
    promiseList.push(promise)
  }

  Promise.all(promiseList).then(() => {
    zip.generateAsync({ type: 'blob' }).then(content => {
      // 生成二进制流 利用file-saver保存文件并自定义文件名
      FileSaver.saveAs(content, '打包下载')
    })
  }).catch(() => {
    this.$message.error('打包下载失败')
  }).finally(() => {
    this.batchDownloadLoading = false
  })
},
getImgArrayBuffer (url) {
  return new Promise((resolve, reject) => {
    // 通过请求获取文件blob格式
    const xmlhttp = new XMLHttpRequest()
    xmlhttp.open('GET', url, true)
    xmlhttp.responseType = 'blob'
    xmlhttp.onload = function () {
      if (this.status === 200) {
        resolve(this.response)
      } else {
        reject(this.status)
      }
    }
    xmlhttp.send()
  })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值