前端实现下载

有时候后台管理需要导出功能,a 标签默认会打开新页面,此方法使用 dom 操作在当前页 面创建下载链接并点击下载

 //下载任务文件事件 url 为下载地址
  function downloadFiles(url, name) {
    const aLink = document.createElement('a') //创建a链接
    aLink.style.display = 'none'
    aLink.href = url
    aLink.download = name
    document.body.appendChild(aLink)
    aLink.click()
    document.body.removeChild(aLink) //点击完成后记得删除创建的链接
  },
 //当后台返回的不是下载地址,而是文件的 blob 格式对象时
 //注意 blobObj 为 blob 格式对象!!!
 //  方法1:
 function downloadFiles(blobObj,fileName){
   const tempBlob = URL.createObjectURL(blobObj)
   const aLink = document.createElement('a')
   aLink.href = tempBlob
   aLink.download = fileName
   aLink.click()
   URL.revokeObjectURL(tempBlob)
 }
//  方法2:
 function downloadFiles(blobObj, fileName) {
   const reader = new FileReader()
   reader.readAsDataURL(blobObj)
   reader.onload = (e) => {
     const aLink = document.createElement('a')
     aLink.style.display = 'none'
     aLink.href = e.target.result
     aLink.download = 'fileName'
     document.body.appendChild(aLink)
     aLink.click()
     document.body.removeChild(aLink) //点击完成后记得删除创建的链接
   }
 }

举例,下载 application/vnd.ms-excel 格式文件

当请求返回的是 application/vnd.ms-excel 类型的数据时,发送 XMLHttpRequest 请求时,注意设置 responseType 为 blob

Last updated

Was this helpful?