JS中文件相关的知识(一):MIME类型
不知道有没有同学和我一样,写代码时一遇到文件操作就犯怵,必须要先去把知识补一遍再说;对于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:这是应用程序文件的默认值。意思是:未知的应用程序文件,浏览器一般不会自动执行或询问执行。
对此我还不能理解,默认意味着什么?具体表现是?不要紧,下一篇,我们好好把这个问题弄明白。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix