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后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...
随机推荐
- Mybatis(一对一、一对多、多对多)操作
* 首先列出示例中用到的数据库表 user表: accout表: role表: user_role表: 建表语句如下: DROP TABLE IF EXISTS `user`; CREATE TABL ...
- ***.jar没有主清单属性
工具环境 idea centos7.9 现象 java -jar运行jar包提示没有主清单属性,如下图所示: 这个jar包,是通过idea打包的,打包方法:idea---File---Project ...
- Softmax偏导及BP过程的推导
Softmax求导 其实BP过程在pytorch中可以自动进行,这里进行推导只是强迫症 A Apart证明softmax求导和softmax的BP过程 本来像手打公式的,想想还是算了,引用部分给出la ...
- RHEL7安装11204 RAC的注意事项
最近在某客户的RHEL7 + 11204 RAC环境上测试遇到不少的坑,好在都赶在正式上线前及时发现并处理完毕. 其中两个问题比较典型所以特别记录下:问题都和主机重启后,O相关服务没有自启动导致,看来 ...
- 2.列表--《Python编程:从入门到实践》
2.1 列表 列表由一系列按特定顺序排列的元素组成.在Python中,用方括号([])来表示列表,并用逗号来分隔其中的元素. bicycles = ['trek', 'cannondale', ' ...
- mybatis SQL in() 为什么要在 mapper.xml里 用 foreach
结论: 若存在 in () 语句,要使用 #{} 预编译入参的方式,需要在 mapper.xml里 使用 foreach ======================================= ...
- .NET Core开发实战(第17课:为选项数据添加验证:避免错误配置的应用接收用户流量)--学习笔记
17 | 为选项数据添加验证:避免错误配置的应用接收用户流量 三种验证方法 1.直接注册验证函数 2.实现 IValidateOptions 3.使用 Microsoft.Extensions.Opt ...
- Windows OhmGraphite 配置
Windows OhmGraphite 配置 由于windows_exporter无法监控温度相关的指标,那么就需要使用OhmGraphite进行监控该指标. 下载 访问 https://github ...
- 致敬英雄,共悼逝者,css 让页面变黑白
壹 ❀ 引 今天是四月四日清明节,也是全国哀悼抗疫烈士的一天.细心的同学可以发现,不仅是娱乐活动以及游戏全部停止,当我们打开各大门户网站,网站页面也都变成了黑白,那么具体怎么做呢,这里可以借用CSS3 ...
- NC19999 [HAOI2016]放棋子
题目链接 题目 题目描述 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行 ...