1. /**
  2. * 下载服务器上文件的方法
  3. * @param {String} stream 数据流
  4. * @param {String} name 文件名称
  5. * @param {String} suffix 文件后缀名
  6. */
  7. export function fileDownload(stream, name, suffix = '.xls') {
  8. if (stream && name) {
  9. const blob = new Blob([stream], {
  10. type: 'application/vnd.ms-excel;charset=utf-8'
  11. })
  12. const reader = new FileReader()
  13. reader.readAsDataURL(blob)
  14. reader.onload = () => {
  15. // console.log(reader.result);
  16. const url = reader.result
  17. // IE10+ 浏览器特殊处理
  18. if (navigator.msSaveBlob) {
  19. navigator.msSaveBlob(blob, name)
  20. } else {
  21. let a = document.createElement('a')
  22. a.href = url
  23. a.download = `${name + suffix}`
  24. a.click()
  25. }
  26. }
  27. }
  28. }

后续

  • 上述函数不知什么原因在内网的谷歌浏览器上竟然下载下来的文件不带后缀,所以改成了下面这样的写法(原来是需要加后缀名.xls的缘故 ) ``` /**
    • 下载服务器上文件的方法
    • @param {String} stream 数据流
    • @param {String} name 文件名称 */ export function fileDownload(stream, name) { if (stream && name) { let blob = new Blob([stream], { type: ‘application/vnd.ms-excel’ }) // IE10+ 浏览器特殊处理 if (navigator.msSaveBlob) { navigator.msSaveBlob(blob, name) } else { let elink = document.createElement(‘a’) elink.href = URL.createObjectURL(blob) elink.download = ${name}.xls document.body.appendChild(elink) elink.click() URL.revokeObjectURL(elink.href) // 释放URL 对象 document.body.removeChild(elink) } } }

```