vue 处理pdf等格式的文件下载

minxi.js里存放,全局调用此方法

export const OPERATE_DOWNLOAD = {
  data() {
    return {
      percent: 0 // 下载进度条
    }
  },
  methods: {
    // 仅用于文件下载
    downloadFile(url, fileName) {
      const _this = this
      _this.percent = 0
      _this.$Spin.show({
        render: (h) => {
          return h('div', [
            h('Progress', {
              style: {
                width: '300px'
              },
              props: {
                percent: _this.percent
              }
            }, fileName + '下载中...' + _this.percent + '%')
          ])
        }
      })
      if (/\.pdf|\.PDF|\.png|\.PNG|\.jpg|\.JPG|\.jpeg|\.JPEG|\.bmp|\.BMP/.test(url)) {
        const interval = setInterval(() => {
          if (_this.percent === 10) {
            _this.downloadMethod(url, fileName)
          }
          if (_this.percent >= 80) {
            clearInterval(interval)
            return
          }
          _this.percent += 10
        }, 500)
      } else {
        const interval = setInterval(() => {
          if (_this.percent === 50) {
            _this.downloadMethod(url, fileName)
          }
          if (_this.percent >= 50) {
            clearInterval(interval)
            return
          }
          _this.percent += 10
        }, 100)
      }
    },
    downloadMethod(url, fileName) {
      const _this = this
      url = url.replace(/\\/g, '/')
      if (/\.pdf|\.PDF/.test(url)) {
        // 下载pdf
        let params = {
          path: url
        }
        downloadStreamByPath(params).then(res => {
          _this.closeProgress()
          let blob = new Blob([res.data], {
            type: 'application/pdf' // word文档为msword,pdf文档为pdf
          })
          let objectUrl = URL.createObjectURL(blob)
          let link = document.createElement('a')
          link.href = objectUrl
          link.setAttribute('download', fileName) // 下载文件的名字
          document.body.appendChild(link)
          link.style.display = 'none'
          link.click()
          document.body.removeChild(link)
        })
      } else if (url != null && url !== '' && url !== 'null') {
        _this.closeProgress()
        // 下载其他文件
        let link = document.createElement('a')
        link.href = window.SITE_CONFIG.fileShowURL + url
        link.setAttribute('download', fileName) // 下载文件的名字
        document.body.appendChild(link)
        link.style.display = 'none'
        link.click()
        document.body.removeChild(link)
      }
    },
    closeProgress() {
      const _this = this
      const interval = setInterval(() => {
        if (_this.percent >= 100) {
          clearInterval(interval)
          _this.$Message.success('文件下载成功')
          _this.$Spin.hide()
          return
        }
        _this.percent += 10
      }, 100)
    }
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值