vue 前端处理后台返回文件流 Blob 下载文件时 type 类型

1,320 阅读1分钟
  1. 将请求都封装到 api.js 文件
/**
 * 下载文件 用于excel导出
 * @param url
 * @param parameter
 * @returns {*}
 */
export function downFile(url, parameter) {
  return axios({
    url: url,
    params: parameter,
    method: 'get',
    responseType: 'blob' // 文件流记得设置 blob
  })
}
export function downFilepost(url, parameter) {
  return axios({
    url: url,
    data: parameter,
    method: 'post',
    responseType: 'blob' // 文件流记得设置 blob
  })
}
}
/**
 * 下载文件
 * @param url 文件路径
 * @param fileName 文件名
 * @param parameter
 * @returns {*}
 */
export function downloadFile(url, fileName, parameter) {
  return downFile(url, parameter).then(data => {
    if (!data || data.size === 0) {
      Vue.prototype['$message'].warning('文件下载失败')
      return
    }
    if (typeof window.navigator.msSaveBlob !== 'undefined') {
      window.navigator.msSaveBlob(new Blob([data]), fileName)
    } else {
      let url = window.URL.createObjectURL(new Blob([data]))
      let link = document.createElement('a')
      link.style.display = 'none'
      link.href = url
      link.setAttribute('download', fileName)
      document.body.appendChild(link)
      link.click()
      document.body.removeChild(link) // 下载完成移除元素
      window.URL.revokeObjectURL(url) // 释放掉blob对象
    }
  })
}

2.引入api.js文件,项目中页面使用new Blob 下载压缩包

  let params = {
    key: value, // 根据自己业务需求 的请求字段 
    key: value, // 根据自己业务需求 的请求字段 
    key: value, // 根据自己业务需求 的请求字段 
    ...
  }
  let url = '12332131' // 自己项目的请求路径
 downFile(url, params)
    .then((data) => {
        if (!data) {
            this.$message.warning('文件下载失败')
            return
        }
        if (typeof window.navigator.msSaveBlob !== 'undefined') {
            window.navigator.msSaveBlob(
                new Blob([data], {
                    type: 'application/zip',
                }),
                params.url
            )
        } else {
            let blob = new Blob([data], {
                type: 'application/zip',
            })
            let url = window.URL.createObjectURL(blob)
            const link = document.createElement('a') // 创建a标签
            link.href = url
            link.download = params.url // 重命名文件
            link.click()
            URL.revokeObjectURL(url) // 释放内存
        }
    })
    .finally(() => {
    })

new Blob 不同文件type类型

文件后缀type
aacaudio/aac
.abwapplication/x-abiword
.arcapplication/x-freearc
.avivideo/x-msvideo
.azwapplication/vnd.amazon.ebook
.binapplication/octet-stream
.bmpimage/bmp
.bzapplication/x-bzip
.bz2application/x-bzip2
.cshapplication/x-csh
.csstext/css
.csvtext/csv
.docapplication/msword
.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
.eotapplication/vnd.ms-fontobject
.epubapplication/epub+zip
.gifimage/gif
.htm.htmltext/html
.icoimage/vnd.microsoft.icon
.icstext/calendar
.jarapplication/java-archive
.jpeg.jpgimage/jpeg
.jstext/javascript
.jsonapplication/json
.jsonldapplication/ld+json
.mid.midiaudio/midi audio/x-midi
.mjstext/javascript
.mp3audio/mpeg
.mpegvideo/mpeg
.mpkgapplication/vnd.apple.installer+xml
.odpapplication/vnd.oasis.opendocument.presentation
.odsapplication/vnd.oasis.opendocument.spreadsheet
.odtapplication/vnd.oasis.opendocument.text
.ogaaudio/ogg
.ogvvideo/ogg
.ogxapplication/ogg
.otffont/otf
.pngimage/png
.pdfapplication/pdf
.pptapplication/vnd.ms-powerpoint
.pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation
.rarapplication/x-rar-compressed
.rtfapplication/rtf
.shapplication/x-sh
.svgimage/svg+xml
.swfapplication/x-shockwave-flash
.tarapplication/x-tar
.tif.tiffimage/tiff
.ttffont/ttf
.txttext/plain
.vsdapplication/vnd.visio
.wavaudio/wav
.webaaudio/webm
.webmvideo/webm
.webpimage/webp
.wofffont/woff
.woff2font/woff2
.xhtmlapplication/xhtml+xml
.xlsapplication/vnd.ms-excel
.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xmlapplication/xml 代码对普通用户来说不可读 (RFC 3023, section 3)text/xml 代码对普通用户来说可读 (RFC 3023, section 3)
.xulapplication/vnd.mozilla.xul+xml
.zipapplication/zip
.3gpvideo/3gpp audio/3gpp(若不含视频)
.3g2audio/video container video/3gpp2audio/3gpp2(若不含视频)
.7zapplication/x-7z-compressed