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 图.帽子墨镜之类的配饰,几乎都没法影响这个网站的检测 ...
随机推荐
- 整合feign过程中出现问题:
一:编译器报错 这个地方是由于没有被spring管理,编译器报错,可以选择加上@comoponent这个注解 也可以选择不加,启动程序是不会报错的. 二 报错为空: org.springframewo ...
- poj3274 找平衡数列(哈希加一点数学思维)
题目传送门 题目大意:有n只牛,每只牛有k个属性,接下来n个数字,每个数字的二进制位上的1和0分别表示某种属性的有或者无,然后一个特殊数列就是,一个区间内所有牛的各种属性的总和相等(有e种1属性 e ...
- Codeforces 277E
按边建模,二叉树一条入边两条出边 判断就要用到mcmf的好处了 #include<bits/stdc++.h> using namespace std; const int maxn = ...
- NFS网络储存系统
为什么用NFS网络文件存储系统? 1)实现数据信息统一一致 2)节省局域网数据同步传输的带宽 3)节省网站架构中服务器硬盘资源 NFS系统存储原理介绍 RPC服务类似一个中介服务,NFS服务端与NFS ...
- 【Effective Java】阅读
Java写了很多年,很惭愧,直到最近才读了这本经典之作<Effective Java>,按自己的理解总结下,有些可能还不够深刻 一.Creating and Destroying Obje ...
- 事物及exec
事物3要出不多讲: 1.BEGIN TRANSACTION--开启事务 2.COMMIT TRANSACTION--事务执行 3.ROLLBACK TRANSACTION--事务回滚 俩总捕捉事物的方 ...
- TXT文件导入到ORACLE数据库中
--创建表 (sqlplus执行) drop table cjw; ),phone ),city ),born ),adressJob ),mail )); ### txt导入到oracle cat ...
- ubuntu 启动 ssh 服务
$ sudo service ssh start $ sudo /etc/init.d/ssh start 重启 $ sudo /etc/init.d/ssh restart $ sudo servi ...
- Redis:存储对象的两种方式(序列化和json字符串)
方式一:序列化操作 public class SerializeUtil { /* * 序列化 * */ public static byte[] serizlize(Object ...
- JavaSE---接口
1.概述 1.1 接口只能继承接口(不能继承类): 1.2 一个接口可以继承多个接口: 1.3 接口中不能包含构造器.初始化块,可以有 属性(只能是常量).方法(只能是抽象方法).内部类(内部接口). ...