JS中文件相关的知识(一):MIME类型

发布时间 2023-07-24 19:44:40作者: 小雨宇

不知道有没有同学和我一样,写代码时一遇到文件操作就犯怵,必须要先去把知识补一遍再说;对于Content-Type、responseType、ArrayBuffer、buffer、blob、file等这些词汇,心里问号一大堆,从来都没有真正区分清楚过;这样下去不是办法呀,真的猛士,应该敢于...

一百次浮于表面,不如一次深入骨髓。我决定尽可能全面的,把自己知道的JS中文件相关的知识总结一遍,虽然麻烦,却一劳永逸。如果还能同时帮助到别人,就更好了!

要了解文件操作,先从了解MIME类型开始。

(1)MIME是什么?

MIME的全名叫多用途互联网邮件扩展(Multipurpose Internet Mail Extensions),它的诞生最初是为了电子邮件,电子邮件最开始只支持传输纯文本,MIME就是为了让它可以支持传输其他数据格式的,比如图片、附件等。后来MIME被推广到其他的协议中,现在最广泛的应用反而是在我们最熟悉的HTTP协议中,请求头和响应头中的Content-Type就是指的MIME类型。在最早的HTTP协议中,是没有数据类型信息的,所有传送的数据都被客户端解释为超文本标记语言HTML文档。正是因为加入了MIME类型,才使得HTTP从只能传输文本,变得丰富多彩。

(2)MIME类型和文件类型是什么关系?

在计算机中,所有文件都是二进制数组,其实本没有文件类型这个概念。文件类型其实指的是它们的编码方式不同,比如文本文件一般是用UTF-8或者ASCII编码,图片用的JPEG编码等,视频用的MPEG-4编码等,这些编码规则都是通用的,所以能编能解。如果程序员用了他自己的一套编码方式,那么计算机就无法解码这个文件,只能统称为“二进制文件”了。

计算机对于不同的文件类型,采取对应的解码方式,来打开这个文件。而MIME类型,作用对象是HTTP协议(在此我们只讨论我们的HTTP协议),让客户端和服务器相互知道,对方发过来的数据是什么类型的,兵来将挡水来土掩,不同的数据类型采取不同的方式来处理。

(3)文件类型和文件扩展名是什么关系?

文件名其实只是一个文件在计算机中存储的路径,和文件内容并无关系,修改文件名(包括扩展名)不会改变文件的内容。而文件类型是由文件编码决定的,所以自然也就不会改变文件的类型。那么文件扩展名的作用是什么呢?它其实只是决定“系统默认打开这个文件的方式”,比如一个psd文件,双击它默认会用PS打开,如果你把后缀改成txt呢,双击就会变成记事本打开,但是打不开啊,因为它其实还是一个psd文件啊。但是此时你把它拖到PS窗口中,它还是能打开的,这说明改了后缀文件类型并没有变。

(4)MIME长什么样?

MIME长这样:主类型/子类型,中间不允许有空格,对大小写不敏感,但一般都是用小写。比如:text/html、application/json、image/png等。MIME的主类型主要有5种:text、image、audio、video、application。

(5)存在的疑问?

在读相关文章时,我看到多处提到有两种MIME类型是特别重要的:text/plain和application/octet-stream,他们分别表示文本文件和其他所有情况的默认值。

text/plain:文本文件默认值。即使它意味着未知的文本文件,但浏览器认为是可以直接展示的。

application/octet-stream:这是应用程序文件的默认值。意思是:未知的应用程序文件,浏览器一般不会自动执行或询问执行。

对此我还不能理解,默认意味着什么?具体表现是?不要紧,下一篇,我们好好把这个问题弄明白。