流文件下载方法

重要知识点:

FileReader.readAsText()

readAsText 方法可以将 Blob 或者 File 对象转根据特殊的编码格式转化为内容(字符串形式)

 
const download = (res, mime) => {
    const mimeList = {
      pdf: 'application/pdf',
      jpg: 'image/jpeg',
      jpeg: 'image/jpeg',
      gif: 'image/gif',
      png: 'image/png',
      doc: 'application/msword',
      docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
      ppt: 'application/vnd.ms-powerpoint',
      pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
      xls: 'application/vnd.ms-excel',
      xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
      zip: 'application/zip',
      rar: 'application/x-rar-compressed',
      bmp: 'image/bmp',
      tif: 'image/tiff',
    }
    if (res && res.type.indexOf('application/json') > -1) {
      const reader = new FileReader()
      reader.onload = () => {
        if (reader.result) {
          const result = JSON.parse(reader.result)
          Vue.prototype.$message.error(result.desc)
        }
      }
      reader.readAsText(res, 'utf-8')
      return
    }
    const blob = new Blob([res], { type: mimeList[mime] || 'application/vnd.ms-excel' })
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
      window.navigator.msSaveOrOpenBlob(blob, downloadName)
    } else {
      const blobURL = window.URL.createObjectURL(blob)
      const tempLink = document.createElement('a')
      tempLink.style.display = 'none'
      tempLink.href = blobURL
      tempLink.setAttribute('download', downloadName)
      if (typeof tempLink.download === 'undefined') {
        tempLink.setAttribute('target', '_blank')
      }
      document.body.appendChild(tempLink)
      tempLink.click()
      document.body.removeChild(tempLink)
      setTimeout(() => {
        window.URL.revokeObjectURL(blobURL)
      }, 50)
    }
  }
posted @ 2021-09-08 09:34  西城东岚  阅读(474)  评论(0编辑  收藏  举报