了解媒体类型MIME

QuibblerQuibbler 2021-03-08 约 14 分钟 2612 次阅读

了解媒体类型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:

MPAaudio/MPA[RFC3555]
mp4audio/mp4[RFC4337][RFC6381]
MP4A-LATMaudio/MP4A-LATM[RFC6416]
mpa-robustaudio/mpa-robust[RFC5219]
mpegaudio/mpeg[RFC3003]
   mpeg4-generic       audio/mpeg4-generic      [RFC3640][RFC5691][RFC6295]  
oggaudio/ogg[RFC5334][RFC7845]
opusaudio/opus[RFC7587]
parityfecaudio/parityfec[RFC3009]

... ...

相关资料:

        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

        

相关推荐

精选
国内开源镜像站点
分享

国内开源镜像站点

国内开源镜像站点开源,(Open Source)全称为开放源代码。开源就是要用户利用源代码在其基础上修改和学习的,但开源系统同样也有版权,同样也受到法律保护。国内的高校和一些企业也建立了开源镜像站点,支持开源。从开源站点上面可以下载很多开源资源(Android源码),上大学的时候就在这些镜像网站上下载Linux发行版、Qt等软件。 清华大学:http://mirrors.tuna.tsinghua

2.4k
R8编译问题:Missing classes detected while running R8
分享

R8编译问题:Missing classes detected while running R8

R8编译问题:Missing classes detected while running R8Android R8是一个代码混淆和压缩工具,可以将应用程序的大小和安全性优化。它引入了一些新功能,如成员内省、混淆指针、类内省等。但R8使用起来一直不友好,因为自从使用R8之后编译问题不断。主要还是和混淆相关,经常报错,最近又遇到一个:Missing classes detected while ru

8.4k
maven { url 'https://jitpack.io' } 无法下载的问题
分享

maven { url 'https://jitpack.io' } 无法下载的问题

解决maven { url 'https://jitpack.io' } 无法下载的问题要使用GitHub上项目的开源库,比如 BRV ,加强版的RecyclerView框架:需要在项目根目录的 build.gradle 添加 jitpack 仓库:以上这些都照做了,却遇到Gradle无法下载依赖的问题。这种情况以前也遇到过,一般是由于网络故障引起的,可以用国内的镜像仓库。尝试了不同方法,仍然无法

6.6k