资讯专栏INFORMATION COLUMN

怎么去控制浏览器对资源文件的处理行为

UsherChen / 3541人阅读

摘要:浏览器是怎么处理文件链接的通常当用户打开一个资源的如果浏览器支持这个格式的文件的情况下,浏览器会尝试去再页面里展示它而不是直接下载。

浏览器是怎么处理文件链接的

通常当用户打开一个资源的url,如果浏览器支持这个格式的文件的情况下,浏览器会尝试去再页面里展示它而不是直接下载。例如一张图片(jpg, png, gif等),几乎所有浏览器都会去将图片在浏览器里面展示。

对于压缩格式的文件(zip, tar, gzip等)浏览器总是会直接去下载它们,另外一些格式的文件,根据浏览器的不同也会有差异的处理方法,例如Microsoft Word文件(doc, docx)在ie浏览器下通常会在浏览器中展示,但是其他浏览器几乎都会直接下载它,同样的对于PDF文件chrome有自己的pdf 转换器它会尝试去在浏览器上展示该文件。

强制下载文件

对于浏览器这种行为,一般情况下是可以接受的,因为用户可以在浏览器显示文件后将文件保存到电脑中,但是一些情况下用户可能希望文件直接被下载而不是在浏览器中被打开,比如有时候用户想去下载一个歌曲,但是浏览器可能回去播放该音频。那么怎么让浏览器强制去下载文件要怎么做呢

a标签的download属性

html5a 标签新增了 download 属性,该属性指示浏览器下载url的内容而不是导航到url,因此如果配置了此属性用户会直接下载url的内容。作为开发如果想直接触发该事件我们可以直接用代码模拟a标签和点击事件

    const link = document.createElement("a");
    link.addEventListener("click", function() {
      link.download = xxx;
      link.href = xxx;
    });
    const e = document.createEvent("MouseEvents");
    e.initEvent("click", false, false);
    link.dispatchEvent(e);

download属性只在同域时候有效,当跨域请求时候该属性将会被忽略。

当前并非所以浏览器都支持该属性,需要浏览器考虑兼容性。

改变资源格式

浏览器会根据资源类型去判断是否支持,如果支持时会尝试去在页面上展示该资源。浏览器判断资源类型是根据返回头Content-Type的值,因此一方面我们在服务端可以设置返回头字段为文件流"Content-Type": "application/octet-stream",或者根据一些具体资源直接压缩后传输,浏览器不能分析zip之类的压缩文件所以会直接去下载它们。

配置Content-Disposition

在HTTP场景中,Content-Disposition 消息头指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地。

inline 默认参数表示消息体会以页面的一部分或者整个页面的形式展示。

attachment 消息体应该被下载到本地,将参数filename的值预填为下载后的文件名

因此当我们希望该资源被直接下载时候,我们可以设置返回头Content-Disposition的值为attachment

    //example
    Content-Disposition: attachment; filename="fname.ext"

这里设置名称时候,要注意下filename的编码格式。

用户自己在浏览器设置

浏览器既然定义了该行为,根据浏览器的不同用户可能在设置页面去配置某些格式的文件是否希望浏览器去展示该文件。一些有争议的情况下,你也可以提示用户自己根据需求去设置这些参数。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95818.html

相关文章

  • HTTP 缓存关键路径

    摘要:其关键路径如下图所示图缓存关键路径三关键路径之验证缓存浏览器发起一个请求,生成报文,先发送到缓存器,缓存器验证是否有本地缓存,缓存是否过期等,即图的第一条路径,称之为验证缓存。 一、证件照场景 拍一次证件照麻烦且费钱,因此每次拍的时候我们都会多留几张备用。这就是计算机世界的缓存,在现实世界中的写照。 如果某个行为很消耗资源,很麻烦,那在实现它的时候就顺便多保留几份,这种行为就是缓存。特...

    Anleb 评论0 收藏0
  • 译文-览器下载图片方式和时间点

    摘要:接下来看看浏览器是怎么处理预测浏览器行为浏览器下载图片应该独立于的构建。那么相应的浏览器就会下载不可见的。因为如果浏览器在构建前开始下载,它是没有办法知道这张图片是不是需要展示在页面上。 原文链接:https://csswizardry.com/2018/... 背景资料 为了更好地控制产品主页缩略图的显示,(作者)团队选择了css的background-image而不是标签上能解决这...

    miguel.jiang 评论0 收藏0
  • serviceWorker 入门

    前提 本文涉及几个知识点:fetch、caches、indexDB 等都不会详细介绍,仅对于其中某些点带过 一. 概念 serviceWorker,服务工作线程,顾名思义,只是作为工作线程存在,不掺和到JS主线程中来,介于 浏览器 & 服务器中间层,可拦截指定 client 所发起的所有请求 二. 用途 目前 PWA(Progress Web App) 的概念很火,大致就是让 web 也跟 app...

    lemanli 评论0 收藏0
  • 缓存详解

    摘要:浏览器的缓存策略缓存的目标一个检索请求的成功响应对于请求,响应状态码为,则表示为成功。 前言 总括: 缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,从而给自己创造了一些麻烦,本文一如既往的用通俗易懂的文字和实例来讲述缓存,希望能让您有所得。 原文博客地址: 缓存详解 知乎专栏&&简书专题:前端进击者(知乎) 博主博客地址:Damonare的个人博客 天青色等烟雨...

    JellyBool 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<