开发中我们常用<a标签>链接下载数据, 非常好用。但是在下载视频的时候 会遇到无法下载 转而打开新页面播放的bug

其实, 查看该响应的headers你就会发现, 它的 Response Headers 中有一条: Content-Type: text/html; charset=UTF-8
没错,当我们点击那个a标签时,浏览器检查了response的Content-Type,发现如果是text/html, 浏览器就会打开页面。当然, 如果这是一个特殊的类型(比如: application/octet-stream),就会触发下载行为。

Content-Type头部的内容实际上是MIME类型,用来表示文档、文件或字节流的性质和格式。浏览器就是根据这个MIME来识别不同的response,并决定如何处理它。

当然, 不光response会有, 其实, 我们发送request的时候, 对于特殊格式的数据, 也会设置特殊的Content-Type, 最常见的就是文件file的提交, 通常会设置'Content-Type': 'multipart/form-data',

现在问题来了,如果要下载的文件本身是一个html,怎么办呢?

将Content-Type手动修改为application/octet-stream可以吗?当然可以,这样浏览器就会认为a标签引用的是一个二进制文件,直接触发下载行为。但是这样做显得太暴力了,下载文件的类型信息丢失了,有没有其他办法呢?

那就是Content-Disposition这个header。Content-Disposition可以告诉浏览器,获取到的资源是展示还是下载,比如:

Content-Disposition: attachment; filename=hello.html

这样,我们就可以让Content-Type是text/html,同时浏览器也能正确识别并下载html文件了。

下面贴上具体的封装方法:

/*** 根据链接下载视频* @param {string} filePath 文件地址* @param {string} fileName 文件名*/
export function videoDownload(filePath: string, fileName: string) {const a = document.createElement('a');document.body.append(a);a.style.display = 'none';// 指示回复的内容该以何种形式展示(是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地。)a.href = filePath + '&response-content-disposition=' + encodeURIComponent('attachment; filename="' + fileName + '"');a.download = fileName;a.click();// 多文件时remove放在setTimeout里面setTimeout(() => {document.body.removeChild(a);}, 300);
}

好啦 今天就分享到这里~!

<a>链接下载视频 而不是打开新页面播放相关推荐

  1. H5页面video强制下载,不打开新页面播放

    移动端H5页面video标签,点击按钮下载当前资源 1. 点击下载后ios浏览器页能直接下载,不会打开新页面播放视频. 2. 视频改名. 3. 下载进度显示,不能空屏或者无操作反馈 实现方式思考: 使 ...

  2. html点击a标签弹层播放视频,html中点击a标签视频在新页面播放

    今天刚好需要做一个点击视频,需要在新页面打开播放.一看到这里,我第一想法就觉得很简单啊,直接一个a标签,里面给一个target为blank,href值为视频播放地址不就好了.想好就开始干,当这样做完之 ...

  3. html中点击a标签视频在新页面播放

    今天刚好需要做一个点击视频,需要在新页面打开播放.一看到这里,我第一想法就觉得很简单啊,直接一个a标签,里面给一个target为blank,href值为视频播放地址不就好了.想好就开始干,当这样做完之 ...

  4. 关于打开新链接,用当前页还是用新页面?

    最近工作有点忙啊,很久没更新了,今天有空上来更新一篇文章. 很久很久以前,就想到这个问题,一直不知道怎么组织语言,关于打开的新链接,是用当前页好呢,还是新页面好,我注意到外国的网站,一般都是用当前页, ...

  5. java弹窗点击事件_[Java教程]jQuery的click事件在当前页弹出层窗口(不打开新页面)...

    [Java教程]jQuery的click事件在当前页弹出层窗口(不打开新页面) 0 2015-10-24 15:00:04 当给链接添加一个click事件,我们可能不希望Web浏览器按照其常规模式退出 ...

  6. nginx服务器,访问目录下php文档会直接下载,而不是转到页面

    ubnuntu系统,nginx服务器,修改本地hosts文件定义自己的域名后,(在/etc/host文件中添加一行:    127.0.0.1    www.my-web-site.com),再访问网 ...

  7. 纯前端实现一键生成二维码,打开新页面展示二维码

    如何实现这个需求呢首先我们需要生成二维码,而且要打开一个新的页面展示,那么我们需要img标签来展示图片的载体,那么生成图片src必不可少的.无论我们的项目是spa,还是多页面应用,我们这里都要用bas ...

  8. 点击a标签在新页面播放视频

    <a target="_blank" onclick="openVideo('视频播放地址')"><div>跳转新页面播放</di ...

  9. 【vue-router,使用router.resolve打开新页面路由跳转】

    vue-router,打开新页面路由跳转 方法 传参 let { href } = this.$router.resolve({path: '/path',query:{id: id ,year: y ...

最新文章

  1. Oracle 重复数据查询以及删除
  2. linux内核同步机制相关收集
  3. 自定义的网页加密与解密
  4. 问题:pom文件有删除线,不能识别maven模块
  5. 笨办法学 Python · 续 练习 30:有限状态机
  6. 治愈系休闲旅游创意海报PSD模板|做设计没思路,快来Get这个小技巧
  7. 每天一个linux命令(28):diff 命令
  8. Java jta 原理_分布式事务JTA实现Atomikos与Spring集成实践
  9. LeetCode(160): Intersection of Two Linked Lists
  10. 用VFP实现一个网盘软件,上传,下载,删除一个不少
  11. scipy--统计检验
  12. 【网络攻防课实验】一:本地系统密码破解
  13. linux tac文件最后五行,tac命令以及各种linux文件查看命令
  14. AlexNet 实现猫狗分类(keras and pytorch)
  15. 二分法求根号二的近似值_根号2约等于多少?
  16. YTU OJ 3094: 善良的小乌龟
  17. Android 源码 PackageManagerService 启动流程分析
  18. Linux进程是如何创建出来的?
  19. 全球及中国带棱镜的全站仪行业发展动态及十四五运营前景咨询报告2022-2027年
  20. 微信小程序——沉浸式导航栏实现

热门文章

  1. js 数据类型之字符串
  2. linux驱动21:内核创建类class_create
  3. 福田欧曼ETX驱动桥的设计(说明书+8张CAD图纸+开题报告+任务书+中期检查表+答辩相关材料)
  4. 为什么c语言加法错误,分数的加减法——C语言初学者代码中的常见错误与瑕疵(12)...
  5. 垂直投影法分割验证码
  6. Linux源码目录结构
  7. 64位win7下安装SQL Server 2008(图文解说版)
  8. 经典Python视频教程
  9. ps知识点2-吸管、修复、画笔、仿章
  10. 2个大厂 100亿级 超大流量 红包 架构方案