axios利用Blob下载

Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。 

Blob 表示的不一定是JavaScript原生格式的数据。File 接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。

 download(param) {
      // 响应类型:arraybuffer, blob
      this.$axios
        .post('url', param, {
          responseType: 'blob'
        })
        .then(res => {

          if (!res) {
            console.error('响应异常:', res)
            return false
          } else {
            const blob = new Blob([res], { type: res.headers['content-type'] })
            let fileName = ''
            const contentDisposition = res.headers['content-disposition']
            if (contentDisposition) {
              fileName = window.decodeURI(
                res.headers['content-disposition'].split('=')[1]
              )
            }
            this.downFile(blob, fileName)
          }

        })
        .catch(function (error) {
          console.log(error)
        })
    },
    downFile(blob, fileName) {
      // 非IE下载
      if ('download' in document.createElement('a')) {
        let link = document.createElement('a')
        link.href = window.URL.createObjectURL(blob) // 创建下载的链接
        link.download = fileName // 下载后文件名
        link.style.display = 'none'
        document.body.appendChild(link)
        link.click() // 点击下载
        window.URL.revokeObjectURL(link.href) // 释放掉blob对象
        document.body.removeChild(link) // 下载完成移除元素
      } else {
        // IE10+下载
        window.navigator.msSaveBlob(blob, fileName)
      }
    },

  上传

 <el-upload drag action="" class="upload upload-drag-caseIn" :http-request="httpIORequest" :on-remove="fileIORemove" :on-exceed="handleIOExceed" :on-change="handleIOChange" :limit="1" :file-list="fileList" accept=".json">
            <div class="el-upload__text">
              将文件拖到此处,或<em>点击上传</em>
            </div>
          </el-upload> 
// ------------------上传文件-开始-------------------
    // 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
    handleIOChange(file, fileList) {
      // 上传文件大小限制,Math.pow(2,20)就是1024*1024,需要显示多少兆就把10改成多少兆
      console.log('文件大小为:', file, fileList)
      if (file.size > 10 * Math.pow(2, 20)) {
        this.fileList = []
        this.$message({
          type: 'warning',
          message: '文件大小超过10M,请重新选择文件!'
        })
        return
      }
      this.fileList = fileList
      this.uploadIOFile(file)
    },
    // 上传excel参数
    async uploadIOFile(param) {
      let fileObject = param.raw
      let formData = new FormData()

      console.log(fileObject, formData)
      formData.append('file', fileObject)
      console.log(fileObject)
      const res = await this.$api.upload(formData)

      console.log('上传文件结果:', res)
      const { code, msg, data } = res
      if (code === '200') {
        this.$api.tip(msg)
        this.caseInFormData.fileName = data
      } else {
        this.$api.tip(msg, 'error')
      }
    },
    // 覆盖请求
    httpIORequest() { },
    // 移除excel参数
    fileIORemove() {
      console.log('移除文件')
      // 执行接口移除文件
      this.caseInFormData.fileName = ''
    },
    // 上传文件限制1个
    handleIOExceed() {
      // this.$message.warning(`最多只可上传一个文件!`)
      this.$api.tip('最多只可上传一个文件!', 'warning')
    },
    // ------------------上传文件-结束-------------------

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值