了解媒体类型MIME
开发中会遇到指定数据MIME类型的场景:网络传输数据内容的类型Content-Type、网络请求RequestBody中数据的MediaType、安卓媒体库MediaFormat中定的MediaType、Intent设置数据和数据类型setDataAndType()。那么什么是MIME?
1、关于MIME
它的英文全称是Multipurpose Internet Mail Extensions,直译为多用途因特网邮件扩展。最初也确实是为了邮件发送文件而定义,后来不仅仅用于邮件,并逐渐发展沿用至今,成为描述消息内容类型的因特网标准。
1.1、语法
MIME的语法结构非常简单:由类型与子类型两个字符串中间用'/'分隔而组成;不允许空格存在;MIME类型对大小写不敏感,通常写法都是小写。
type/subtype
type表示可以被分多个子类的独立类别,子类见2.2节。subtype表示细分后的每个类型。MediaType在OkHttp库中的定义如下:
/**
* An [RFC 2045][rfc_2045] Media Type, appropriate to describe the content type of an HTTP request
* or response body.
*
* [rfc_2045]: http://tools.ietf.org/html/rfc2045
*/
class MediaType private constructor(
private val mediaType: String,
/**
* Returns the high-level media type, such as "text", "image", "audio", "video", or "application".
*/
val type: String,
/**
* Returns a specific media subtype, such as "plain" or "png", "mpeg", "mp4" or "xml".
*/
val subtype: String,
)
1.2、维护
MIME由专门的组织负责协调:IETF(国际互联网工程任务组),并以RFC的形式将MIME的标准发布在网上。被广泛使用的文件格式才会被公认采纳,并获得官方认证MIME。比如常见的压缩格式zip、文本text、图像png等等。绝大多数公司、程序和开发者都遵循这个规范。
个人无法注册MIME Type,但是可以使用保留格式自定义程序文件的MIME:以application/x-开头。即便定义了可能也不会被系统和大多数程序认可,比如Android系统中处理多媒体类型的类VideoCapabilities和AudioCapabilities对于未知MIME Type会警告,从日志可以查看到警告信息:
11398-11506/? W/VideoCapabilities: Unsupported mime image/vnd.android.heic
11398-11506/? W/AudioCapabilities: Unsupported mime audio/x-ms-wma
11398-11506/? W/AudioCapabilities: Unsupported mime audio/mpeg-L1
11398-11506/? W/AudioCapabilities: Unsupported mime audio/mpeg-L2
11398-11506/? W/AudioCapabilities: Unsupported mime audio/ra
11398-11506/? W/AudioCapabilities: Unsupported mime audio/alac
11398-11506/? W/AudioCapabilities: Unsupported mime audio/ape
... ...
1.3、用途
MIME用来告知浏览器或者程序文件的具体类型,进而能够根据文件的具体类型进行处理,而不是通过文件扩展名处理。
在浏览器页面中按F12打开调试工具,可以看到页面中各个文件对应的Content-Type,浏览器就是根据不同文件对应的Content-Type类型展示内容:文本就显示文字,图片就是显示图像,音视频文件就用多媒体播放器处理 ...
2、MIME种类
开发者对text/plain一定不陌生,这是最常见的MIME类型,表示文本文件。还有很多开发中常见的MIME类型:image/png、application/javascript、text/html。
2.1、常见MIME
开发者只需要知道常用的MIME类型,在项目中可以定义下面这些MIME为常量方便开发过程中使用。
超文本标记语言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 .mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
2.2、MIME大类
MIME有以下几个独立的类别,它们作为本类型MIME定义的前缀type。
2.3、查询MIME
互联网号码分配机构IANA负责确认并收录标准MIME,官方网站:IANA Media Types。收录了目前已知所有类型的MIME,开发者从该网站上可以查询需要的MIME:
... ...
相关资料:
Media Types
Mozilla 常见 MIME 类型列表
Mozilla MIME 类型
MIME 参考手册
RFC-822 Standard for ARPA Internet text messages
RFC-2045 MIME Part 1: Format of Internet Message Bodies
RFC-2046 MIME Part 2: Media Types
RFC-2047 MIME Part 3: Header Extensions for Non-ASCII Text
RFC-2048 MIME Part 4: Registration Procedures
RFC-2049 MIME Part 5: Conformance Criteria and Examples