pdf 等所有文件通过blog强制下载函数 downloadFileFromBlobByToken
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)
}
pdf 等所有文件通过blog强制下载函数 downloadFileFromBlobByToken的更多相关文章
- PDF文件预览和下载
背景:项目中实现pdf文件的预览以及下载 环境:jdk1.8.SpringBoot2.0.Maven PDF.js下载地址将下载的源码拷入项目中 修改viewer.js: 将default ...
- PHP如何强制下载文件
很多网站都需要做文件下载的功能.如果直接给连接的方式下载的话有很多的弊处...因为有时候需要对下载权限的检查,对下载次数的检查.所以一般采用php的方法进行安全下载.但是下载的时候如果是txt jpg ...
- pdf流文件的展示、下载、打印;html转为pdf
背景:合同(后台返回pdf流文件)展示.下载.打印,基于angular4 场景区分: 1.checkout页面 —— post接口,入参为offering.shippingInfo.invoice等( ...
- TP5 强制下载PDF
为什么叫强制下载 因为你点击你的PDF文件路劲的话 浏览器是默认字网页上打开,而不是下载 我们需要做的就是 修改header头信息 使其变为下载状态 //下载PDF public functi ...
- 十三、nginx 强制下载txt等文件
当前的浏览器能够识别文件格式,如果浏览器本身能够解析就会默认打开,如果不能解析就会下载该文件. 那么使用nginx做资源服务器的时候,如何强制下载文件呢? location /back/upload/ ...
- 记录一个php强制下载文件函数
整理个经常用的强制下载文件的函数,之前就说把一些常用的东西整理出来结果老是没时间,最近陆续把这些东西整理下. public function download() { $id = $this-> ...
- php进行文件的强制下载
浏览器下载文件,例如在浏览器中可以直接打开的文件(.gif /.txt等).在进行文件下载操作时,默认是通过浏览器直接打开,而不是下载保存文件.并且通过这种方法下载文件可以不暴漏下载文件所在的路径,可 ...
- Nginx配置指定媒体类型文件强制下载
由于业务需要,在点击显示链接(如www.xxx.com/2015-01-15/xxx.png)显示媒体资源(如图片.视频.音频.文档),而在点击下载链接(如www.xxx.com/2015-01-15 ...
- 文件上传和下载(可批量上传)——Spring(二)
针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...
- SpringBoot下文件上传与下载的实现
原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...
随机推荐
- ECMAScript 2023 新特性预览
ECMAScript 2023 的最终版本预计将于今年 6 月底发布.会议基本已经确定 了 ECMAScript 2023 的新功能列表,预计不会再有任何重大的编辑更改. 着该提案已被 ECMAScr ...
- VB6的Office颜色菜单 - 开源研究系列文章
今天把VB6里面的源码开源了( VB6各类源码开源 - 开源研究系列文章 ),这次把原来VB6里面的一个菜单控件进行介绍,需要的网友请下载安装: 1.看使用截图: 运行时截图: 设计时截图: 2.Of ...
- P9474 [yLOI2022] 长安幻世绘题解
题目链接: [yLOI2022] 长安幻世绘 比较不错的综合题.考虑下处理极差的绝对值我们应该怎么做,很显然排序是有必要的,我们需要带着下标排序. 考虑几个核心点: 1.假如没有其他限制考虑极差与序列 ...
- delphi IDE 控件居中的方法
- 我的微软 MVP 之路
目录 微软 MVP 大礼包 我的社区经历 如何成为微软 MVP 微软 MVP 权益 总结 微软 MVP 大礼包 今天,我收到了飘洋过海的微软 MVP 大礼包,内心无比激动,礼包内包含了一座水晶奖杯,一 ...
- 掌握C语言文件操作:从入门到精通的完整指南!
欢迎大家来到贝蒂大讲堂 养成好习惯,先赞后看哦~ 所属专栏:C语言学习 贝蒂的主页:Betty's blog 1. 什么是文件 文件其实是指一组相关数据的有序集合.这个数据集有一个名称,叫做文件名.文 ...
- NC51111 Atlantis
题目链接 题目 题目描述 There are several ancient Greek texts that contain descriptions of the fabled island At ...
- NC16129 小小粉刷匠
题目链接 题目 题目描述 "lalala,我是一个快乐的粉刷匠",小名一边快活地唱着歌,一边开心地刷着墙",兴致突然被打断,"小名,你今天如果刷不完这一栋楼的墙 ...
- Error: testWhileIdle is true, validationQuery not set
说明 使用springboot连接数据库,启动的时候报错:testWhileIdle is true, validationQuery not set.但是不影响系统使用,数据库等一切访问正常.记录备 ...
- 关于 try... catch
在逛论坛看见一个有意思的帖子,有点意思,记录下 关于"异常捕捉"(try catch)是否存在悖论? 一些我觉得有用的回复,放到下面了, 1. 当某些错误状况难以完全避免时,try ...