Azure进阶攻略 | 下载还是在浏览器直接打开,MIME说了算!
多年来,从一开始的网络菜鸟发展成 Azure 云专家,想必你一定学到了很多知识。不知道在这个过程中你自己是否遇到过,或者被人问到过类似下面这样的问题:
同样是直接点击网页上提供的 .mp4 视频文件链接,有些网站会下载,有些网站会在浏览器里直接播放,这是如何实现的?
能否把在浏览器里播放的视频改为默认下载到用户电脑上?
点击一个 .rar 文件链接,为啥没有下载,而是在浏览器里显示了一大堆乱码?
请教高手就会知道,这都是 Web 服务器的 MIME 设置决定哒。类似这样的问题,只要修改 MIME 设置就行。
MIME 是什么?
互联网媒体类型(Internet Media Type,也称 MIME 类型或内容类型)是给互联网上传输的内容赋予的一种两段式的分类类型。浏览器会通过 MIME 这个参数决定对某些文件的处理方式,比如下载、调用播放器打开,或直接在浏览器中打开。错误的 MIME 设置可能会使浏览器错误地处理文件,例如下载本应该直接打开的视频文件,或点击链接后报错。
感觉是个很难懂的概念,但如果把这个概念和电脑上的「文件关联」结合在一起想就比较简单了。
当我们在电脑上双击一个文件时,系统会调用默认关联的程序打开这个文件。例如双击一个 .docx 文档,自动使用 Word 打开;双击照片,自动使用看图软件打开。
而 MIME,也可以理解为网页浏览器/服务器与不同类型文件之间建立的文件关联。
如果没有设置正确的文件关联,那么在访问某些文件时就会遇到各种不同结果。
例如在电脑上,双击打开一个未知扩展名的文件,可能会这样:
如果用浏览器访问一个 MIME 设置有误的文件,则可能会产生各种非预期的行为,例如本应由浏览器下载的 .rar 压缩文件,被直接显示了二进制字符串内容;或者本来希望用户下载到本地的视频,直接在浏览器里播放了。
为了让通过网络访问的每种类型文件表现出与预期一致的行为,MIME 设置很重要。
很多有网站运维经验的童鞋对不同 Web 服务器该如何设置 MIME 已经非常熟悉啦。但在上云之后,将文件存储到 Azure Blob 存储中,此时该如何设置正确的 MIME?
首先,你必须得是 Azure Blob 存储的管理员!毕竟需要修改重要设置嘛,总不能随随便便一个最终用户就能随意修改的。
其次,需要先看看默认设置能否满足要求。
Azure Blob 存储支持大部分常见的 MIME 类型,并会将媒体类型配置保存在文件的内容类型(Content type)字段中。在将文件上传至 Azure Blob 存储时,如果没有特别设置内容类型,Azure 存储默认会给该文件赋予进制文件的内容类型。
如果默认设置无法满足需求,必须修改呢?方法有两种:
1
上传文件时选择要使用的类型
通过 Azure 存储传输工具 AzCopy 或管理工具 Azure Storage Explorer(Windows/Mac)上传到 Blob 存储的文件,都会通过分析文件的后缀名,被自动加上正确的内容类型。
如果是通过自定义代码上传文件,可以引用 .Net Framework 4.5 BCL 库中的System.Web.MimeMapping 类,或在代码中加入 MIME 类型词典进行媒体类型的判断(第三方代码,仅供参考)。
2
修改已上传内容的类型
对于已经上传到 Blob 存储的内容,如果要修改 MIME,可以安装 Azure Storage Explorer(Windows/Mac),在这个软件中登录存储账号,找到要修改的文件,右键单击并选择「属性」,随后就可以按需更改内容类型啦。
温馨提示:
Azure Storage Explorer 在 0.8.6 及以上版本才有修改 Blob 及文件属性的功能。如发现无法修改 Blob 属性,请升级至最新版。
如果希望批量修改一个 Blob 容器内的所有文件,可参考 PowerShell 脚本。
如果改好媒体类型后浏览器仍然提示下载或报错,请清空浏览器缓存,或更换未访问过该文件的浏览器再试。
Azure进阶攻略 | 下载还是在浏览器直接打开,MIME说了算!的更多相关文章
- Azure进阶攻略丨Azure网络通不通,PsPing&PaPing告诉你答案
很多时候,为了解决一些问题,要查各种文档,很麻烦你造吗!做「伸手党」又容易被鄙视,这时候就需要用到[Azure 进阶攻略]啦!特此,我们推出关于 Azure 常用操作指南的系列文章,每篇涉及一个 Az ...
- Azure进阶攻略丨共享访问签名是个什么东东?
Azure 进阶攻略]一经推出便受到了广大粉丝的热情追捧,大家纷纷表示涨了姿势,并希望能了解更多的攻略~根据大家的投票结果,本期,小编将为大家讲解“如何生成 Shared Access Signatu ...
- Azure进阶攻略 | VS2015和Azure,想要在一起其实很容易
下雨天,巧克力和音乐很配…… 大冬天,男神和捧在手里的奶茶很配…… 「驴牌」的包包,和女神的全部衣服都配…… 对于「王首富」,容易实现的小目标和一个亿是绝配…… …… 醒醒吧!!这些事情和每天只会写代 ...
- Azure进阶攻略 | 该如何唤醒你?因内核超时而沉睡的Linux虚拟机!
周五下午,当你收拾好东西准备下班,奔赴 Happy Hour 时,突然接到开发团队的电话: 对方:伙计救命啊,我在搭建开发环境,但 Azure 上的 Linux 虚拟机无法启动! 你(心里想着:你要加 ...
- Azure 进阶攻略 | 文件完整性,你打算如何证明?
假设你是一位独立软件开发者,通过自己的网站提供软件下载.网站完全托管在 Azure 中,并且软件下载也是通过 Azure Blob 存储和 Azure CDN 服务提供的. 这做法真不错,不需要自己管 ...
- Azure进阶攻略丨如何驾驭罢工的Linux虚机网卡?
很多人的生活中,流传着一个屡试不爽,据说可以解决任何问题的百宝锦囊: 所以经常可以听到类似这样的对话: -我的电脑咋上不去网了? -重启一下电脑. -还是不行呢! -重启一下路由器. -怎么还不行-_ ...
- Azure 进阶攻略 | 上云后的系统,「门禁」制度又该如何实现?
各位办公室白领们,不妨回想一下自己每天去公司上班时的一些细节. 为避免「闲杂人等」进入工作场所,我们需要证明自己是这家公司的员工才能进入,对吧!所有员工,无论所属部门或职位,都必须先证明自己身份,例如 ...
- Azure进阶攻略 | 应用流畅运行杜绝超载,自有一套好方法
世界上很多东西,无论交通工具.房屋建筑,甚至计算机程序,在容量方面都存在设计上的理论最大值. 比如火车,正常情况下是这样的.舒适地坐着,安静地读一本书,时不时抬头若有所思地远眺车窗外风景,满满的文艺范 ...
- Azure进阶攻略 | 你的程序也能察言观色?这个真的可以有!
前段时间有个网站曾经火爆微博和朋友圈:颜龄机器人.只要随便上传一张包含人面孔的照片,这个网站就可以分析图片,并判断照片中人物的年龄.化妆.美颜 P 图.帽子墨镜之类的配饰,几乎都没法影响这个网站的检测 ...
随机推荐
- git ignore文件
创建.gitignore文件来设置git要忽略的文件模式: 官方文件列列表:https://github.com/github/gitignore 1. 所有空行或者以 # 开头的行都会被 Git 忽 ...
- Educational Codeforces Round 13 B
Description The girl Taylor has a beautiful calendar for the year y. In the calendar all days are gi ...
- day_04 列表
1. 列表list 能装对象的对象,有序的(按照我们存放的顺序) 以[]表示,里面可以存放大量各种元素,各个元组用逗号隔开 列表也具有索引和切片 2. 列表的增改删查 1. 增 1.append() ...
- thinkphp的初步认识
框架的意义减少重复劳动便于团队配合增强安全性工作/面试都需要 为什么学习ThinkPHP国内公司用的多框架基本都是MVC架构,学一则通 一.框架的部署 1.1下载tp官网 http://www.thi ...
- 正确理解ThreadLocal:ThreadLocal中的值并不一定是完全隔离的
首先再讨论题主的这个观点之前我们要明确一下ThreadLocal的用途是什么? ThreadLocal并不是用来解决共享对象的多线程访问问题. 看了许多有关ThreadLocal的博客,看完之后会给人 ...
- spring AOP注解
此段小代码演示了spring aop中@Around @Before @After三个注解的区别@Before是在所拦截方法执行之前执行一段逻辑.@After 是在所拦截方法执行之后执行一段逻辑.@A ...
- svn被锁 The project was not built due to "org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir
解决办法 : 右键该项目 ,---->Team---->选"Team"-->"Refresh/Cleanup",并确认"Ref ...
- Neutron命令测试5
jolin@jolin:/$ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface ...
- (转) HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学)
HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手.TCP/IP协议基础.加密学) 原文:http://blog.csdn.net/itermeng/article/detai ...
- 用一层for循环初始化三维数组
][][]; ; i < * * ; i++) { a[i / ][(i / ) % ][i % ] = i; printf(, (i / ) % , i % ); // printf(&quo ...