vue 下载文件的几种办法

368 阅读1分钟
const baseURL = `${process.env.BASE_API + process.env.PREFIX}`
  const url = baseURL + `/downloadFile/${uploadCode}`
  window.open(url)
  2.带上token时,需要转换格式
  export function download(code, name, object) {
  return request({
    url: '' + code,
    method: 'get',
    responseType: 'blob'
  }).then(res => {
    // 返回类型正确时
    if (res.data.type === 'application/octet-stream') {
      // 兼容IE
      if (window.navigator.msSaveBlob) {
        try {
          const blobObject = new Blob([res.data])
          window.navigator.msSaveBlob(blobObject, name)
        } catch (e) {
          console.log(e)
        }
      } else {
        const blob = new Blob([res.data], {
          type: 'application/vnd.ms-excel'
        })
        const dom = document.createElement('a')
        const url = window.URL.createObjectURL(blob)
        dom.href = url
        dom.download = name
        // dom.style.display = 'none'
        document.body.appendChild(dom)
        dom.click()
        dom.parentNode.removeChild(dom)
        window.URL.revokeObjectURL(url)
      }
    } else {
      // 返回错误信息时
      new Promise((resolve, reject) => {
        const reader = new FileReader()
        reader.readAsText(res.data)
        reader.onload = () => {
          const content = reader.result
          const message = JSON.parse(content).message // 错误信息
          resolve(message)
        }
      }).then(res => {
        object.$message({
          type: 'error',
          message: res
        })
      })
    }
  })
}