首页 > 其他分享 >pdf 等所有文件通过blog强制下载函数 downloadFileFromBlobByToken

pdf 等所有文件通过blog强制下载函数 downloadFileFromBlobByToken

时间:2023-07-24 11:55:27浏览次数:36  
标签:info downloadFileFromBlobByToken const url matchStr console blog xhr pdf

downloadFileFromBlobByToken

pdf 等所有文件通过blog强制下载函数 downloadFileFromBlobByToken

import { getToken } from '@/libs/util'
export const downloadFile = src => {
  console.log(src)
  let iframe = document.createElement('iframe')
  iframe.src = src
  iframe.style.display = 'none'
  iframe.style.height = 0
  document.body.appendChild(iframe)
  setTimeout(() => {
    iframe.remove()
  }, 3000)
}

/* 通过BLob文件来下载保存文件 */
const downloadFileFromBlob = (blob, fileName) => {
  // fileName 一定是要带后缀名的,而且要和blob匹配,否则下载文件打不开
  if (window.navigator && window.navigator.msSaveOrOpenBlob) { // IE系列兼容,兼容IE10+,Edge12-18
    window.navigator.msSaveOrOpenBlob(blob, fileName)
  } else {
    const downloadElement = document.createElement('a')
    const href = window.URL.createObjectURL(blob)
    downloadElement.href = href
    downloadElement.download = fileName
    document.body.appendChild(downloadElement)
    downloadElement.click()
    document.body.removeChild(downloadElement)
    window.URL.revokeObjectURL(href)
  }
}
const getFilenameFromUrl = (url) => {
  var anchor = url.indexOf('#')
  var query = url.indexOf('?')
  var end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length)
  return url.substring(url.lastIndexOf('/', end) + 1, end)
}

const populateIframe = (url, headers, callback) => {
  var xhr = new XMLHttpRequest()
  xhr.open('GET', url)
  xhr.responseType = 'blob'
  headers.forEach((header) => {
    xhr.setRequestHeader(header[0], header[1])
  })
  xhr.onreadystatechange = () => {
    if (xhr.readyState === xhr.DONE) {
      if (xhr.status === 200) {
        // const disposition = xhr.getResponseHeader('content-disposition')
        // console.info('xhr.getAllResponseHeaders()', xhr.getAllResponseHeaders())
        // console.info('disposition', disposition)
        // const matched = /.*filename=(.*)/.exec(disposition) // 匹配
        // console.info('matched', matched)
        // const matchStr = matched?.[1]?.trim()
        // console.info('matchStr', matchStr)
        // console.info('decodeURI(matchStr)', decodeURI(matchStr))
        // console.info('decodeURIComponent(escape(matchStr))',
        //   decodeURIComponent(escape(matchStr)))
        // console.info('1+2+3',
        //   decodeURI(decodeURIComponent(escape(matchStr))))
        // downloadFileFromBlob(xhr.response, decodeURI(matchStr))
        const fileName = getFilenameFromUrl(url)
        console.info('fileName', fileName)
        downloadFileFromBlob(xhr.response, decodeURI(fileName))
        // downloadFileFromBlob(xhr.response, decodeURIComponent(escape(matchStr)))
        // callback && callback(URL.createObjectURL(xhr.response))
        // callback && callback(URL.createObjectURL(xhr))
        // callback && callback(URL.createObjectURL(xhr.response))
      }
    }
  }
  xhr.send()
}
export const downloadFileFromBlobByToken = (downloadFileUrl) => {
  console.info('downloadFileFromBlobByToken downloadFileUrl', downloadFileUrl)
  const headers = [
    ['token', getToken()]
  ]
  populateIframe(downloadFileUrl, headers)
}

标签:info,downloadFileFromBlobByToken,const,url,matchStr,console,blog,xhr,pdf
From: https://www.cnblogs.com/pengchenggang/p/17576870.html

相关文章

  • js直接下载PDF
    1、前端引入js <scripttype="text/javascript"src="${pageContext.request.contextPath}/modules/util/downDoc/html2pdf.js"></script>2、js方法html定义div$("#downPrint").click(function(){exportPdf();}......
  • Linux 查看office文件及pdf文件
    1.查看pdf文件evincePdfFile_name查看office文件openoffice.org文件名&//打开或者编辑.doc.odt等文本文档命令openoffice.org-a文件名.doc&//打开演示文件命令openoffice.org-g文件名....&//打开电子表格:openoffice.org-c文件名&sofficefile_na......
  • 设计模式:可复用面向对象软件的基础 pdf电子书分享
    《设计模式:可复用面向对象软件的基础》是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶。四位顶尖的面向对象领域专家精心选取了最具价值的设计实践,加以分类整理和命名,并用简洁而易于重用的形式表达出来。本书已经成为软件开发人员的圣经和词典,书中定......
  • 【专题】2023年中国母婴营养品市场洞察报告PDF合集分享(附原数据表)
    报告链接:https://tecdat.cn/?p=33286原文出处:拓端数据部落公众号本报告合集主要研究和探讨了中国母婴营养品行业近年来的发展历程、市场现状、消费者行为习惯以及未来的发展趋势。研究的目的是全面解读母婴营养品行业的发展情况、市场现状以及关键营养素,并对母婴营养品的消费人......
  • 【专题】展望人工智能银行:当银行遇到AI报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=32210在2016年,AlphaGo机器人打败了18届世界棋王李世石,成为了世界棋坛上最伟大的人物。阅读原文,获取专题报告全文,解锁154份文末人工智能银行相关报告。围棋是一种非常复杂的棋类,它要求有很强的直觉,想像力和策略性的思考,而这一切在很长一段时间里都......
  • react批量生成pdf
    使用htmlpdf.js批量将html页面转为pdf,打包成zip下载。htmlpdf.js是结合html2canvas和jsPDF实现的。首先先安装包npminstall--savehtml2pdf.js基本页面importhtml2pdffrom"html2pdf.js";functionApp(){consthandleExportPdf=()=>{//导出pdf......
  • 一个简单好用的PDF目录制作器-备份
    QuickOutlineGitHub连接知乎链接......
  • 【专题】2023年中国工业机器人行业研究报告PDF合集分享(附原数据表)
    报告链接:https://tecdat.cn/?p=33224本报告合集将基于中国工业产业升级和智能制造的背景,通过对供应端市场和产业链的分析,结合投资视角,探讨工业机器人企业如何增强自身竞争力,推动中国工业产业发展,为企业带来新的增长和转型机会,并从而思考中国工业机器人行业的现状和未来趋势。点......
  • 【专题】中国工业机器人市场研究报告PDF合集分享(附原数据表)
    报告链接:https://tecdat.cn/?p=33224本报告合集将基于中国工业产业升级和智能制造的背景,通过对供应端市场和产业链的分析,结合投资视角,探讨工业机器人企业如何增强自身竞争力,推动中国工业产业发展,为企业带来新的增长和转型机会,并从而思考中国工业机器人行业的现状和未来趋势。点......
  • 【专题】中国工业机器人市场白皮书报告PDF合集分享(附原数据表)
    报告链接:https://tecdat.cn/?p=33224本报告合集将基于中国工业产业升级和智能制造的背景,通过对供应端市场和产业链的分析,结合投资视角,探讨工业机器人企业如何增强自身竞争力,推动中国工业产业发展,为企业带来新的增长和转型机会,并从而思考中国工业机器人行业的现状和未来趋势。点......