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的更多相关文章

  1. PDF文件预览和下载

    背景:项目中实现pdf文件的预览以及下载 环境:jdk1.8.SpringBoot2.0.Maven    PDF.js下载地址将下载的源码拷入项目中    修改viewer.js: 将default ...

  2. PHP如何强制下载文件

    很多网站都需要做文件下载的功能.如果直接给连接的方式下载的话有很多的弊处...因为有时候需要对下载权限的检查,对下载次数的检查.所以一般采用php的方法进行安全下载.但是下载的时候如果是txt jpg ...

  3. pdf流文件的展示、下载、打印;html转为pdf

    背景:合同(后台返回pdf流文件)展示.下载.打印,基于angular4 场景区分: 1.checkout页面 —— post接口,入参为offering.shippingInfo.invoice等( ...

  4. TP5 强制下载PDF

    为什么叫强制下载  因为你点击你的PDF文件路劲的话   浏览器是默认字网页上打开,而不是下载 我们需要做的就是 修改header头信息  使其变为下载状态 //下载PDF public functi ...

  5. 十三、nginx 强制下载txt等文件

    当前的浏览器能够识别文件格式,如果浏览器本身能够解析就会默认打开,如果不能解析就会下载该文件. 那么使用nginx做资源服务器的时候,如何强制下载文件呢? location /back/upload/ ...

  6. 记录一个php强制下载文件函数

    整理个经常用的强制下载文件的函数,之前就说把一些常用的东西整理出来结果老是没时间,最近陆续把这些东西整理下. public function download() { $id = $this-> ...

  7. php进行文件的强制下载

    浏览器下载文件,例如在浏览器中可以直接打开的文件(.gif /.txt等).在进行文件下载操作时,默认是通过浏览器直接打开,而不是下载保存文件.并且通过这种方法下载文件可以不暴漏下载文件所在的路径,可 ...

  8. Nginx配置指定媒体类型文件强制下载

    由于业务需要,在点击显示链接(如www.xxx.com/2015-01-15/xxx.png)显示媒体资源(如图片.视频.音频.文档),而在点击下载链接(如www.xxx.com/2015-01-15 ...

  9. 文件上传和下载(可批量上传)——Spring(二)

    针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...

  10. SpringBoot下文件上传与下载的实现

    原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...

随机推荐

  1. 从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。

    从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系. 项目效果 以下两张图是系统实际运行效果: 1.项目运行方式 运行环境:Python3 数据库:neo4j 预 ...

  2. python处理Excel实现自动化办公教学(含实战)【二】

    相关文章: python处理Excel实现自动化办公教学(含实战)[一] python处理Excel实现自动化办公教学(含实战)[二] python处理Excel实现自动化办公教学(数据筛选.公式操作 ...

  3. 19.9 Boost Asio 同步字典传输

    这里所代指的字典是Python中的样子,本节内容我们将通过使用Boost中自带的Tokenizer分词器实现对特定字符串的切割功能,使用Boost Tokenizer,可以通过构建一个分隔符或正则表达 ...

  4. 4.6 C++ Boost 函数绑定回调库

    Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量.可移植.高效的C应用程序.Boost库可以作为标准C库的后备,通常被称为准标准 ...

  5. Git Q&A

    git入门 Q: 什么是git ? A: git是一种版本控制工具,也是程序员的"后悔药":当你在工程中写入一堆混乱的代码后,只要通过几行简单的git命令,就可以回退到任意一个提交 ...

  6. Linux-双网卡绑定bond详解

    1.什么是bond 网卡bond是通过多张物理网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术.Kernels 2.4.12及以后的版本均供bonding模 ...

  7. 什么是TDD(一)

    引子 回顾 虽然我很早以前就听说单元测试,也曾经多次在项目中引入单元测试框架和单元测试的实践为代码质量的提升带来了一丝助力. 但这种方式更多的是从软件调试的角度出发,即将单元测试作为一种测试方法可用性 ...

  8. [pwn之路]patchelf之后,加载符号表!

    # 前言 当你在进行二进制漏洞学习和利用时,经常需要使用调试工具来分析和理解程序的内部工作.在之前的交流中,我们提到了如何使用patchelf来修改二进制文件[Pwn之路]根据所给库,获得远程同环境- ...

  9. thinkphp集成webuploader实战

    介绍 最近用了下thinkphp搞自己的博客,期间用到了百度的webuploader上传图片.百度出来的参考质量一言难尽,写教程没有一点追求,千篇一律的复制粘贴,某些个作者自己都没搞清楚就发文,误人又 ...

  10. html+css:小米顶部菜单+二级菜单

    1.源码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...