媒体类型(MIME)是什么
作者:互联网
MIME 定义
MIMEIETF RFC 6838 (Multipurpose Internet Mail Extensions)是一种标准,用来表示文档、文件或字节流的性质和格式。
随便打开一个网站,通过控制台可以看到网页在完成渲染之前向 Web 服务器请求大量的资源,这些资源有图片、音频、视频、CSS、JavaScript。为了区别资源类型,给 HTTP 头字段 Content-Type 添加 MIME,以便于浏览器以正确的方式处理它们。
给 HTTP 头字段 Content-Type 添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会曲解文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。
如上图,请求 eva.png 的 HTTP 的响应头字段 "content-type: image/png",代表图片资源是一个 .png 格式的图片。
MIME 结构
MIME 的组成结构非常简单,由类型与子类型两个字符串中间用 "/" 分隔而组成。"type" 表示可以被分多个子类的独立类别;"subtype" 表示细分后的每个类型。
type/subtype
独立媒体类型
有 TEXT(文本)、IMAGE(图像)、AUDIO(音频)、VIDEO(视频)、APPLICATION(应用程序)这五种独立媒体类型。
独立媒体类型 | 主类型 | RFC 定义 | 子类型 |
---|---|---|---|
TEXT | 表明是某种文本文件 | RFC 6838 - 4.2.1 | text/plain, text/html, text/css |
IMAGE | 表明是某种图像文件 | RFC 6838 - 4.2.2 | image/gif, image/png |
AUDIO | 表明是某种音频文件 | RFC 6838 - 4.2.3 | audio/midi, audio/mpeg |
VIDEO | 表明是某种视频文件 | RFC 6838 - 4.2.4 | video/webm, video/ogg |
APPLICATION | RFC 6838 - 4.2.5 |
复合媒体类型
上面五个独立媒体类型要求内容只能其中一种独立媒体类型,不可以包含多独立媒体类型;而 MULTIPARTRFC 6838 - 4.2.6可以让内容包含多种独立媒体类型,所以它是符合媒体类型。
MULTIPART 的子类型通常是 "form-data",即 "multipart/form-data"。它通常用来上传文件时所使用的一种 MIME 类型。
怎么才体现出它是符合媒体类型?
let formData = new FormData();
// 可多选文件
for (let index in this.files) {
formData.append(`files`, this.files[index]);
}
// 添加两个非文件的数据
formData.append('name', this.user.name);
formData.append('sex', this.user.sex);
用 axios 发送 formData 给 Web 服务器:
axios.post('http://localhost:8080/upload', formData, {
headers: {
'content-type': 'multipart/form-data'
}
});
API 接口:
@RequestMapping(value = "/upload", consumes = "multipart/form-data")
public void upload(@RequestParam("name") String name, @RequestParam("sex") String sex, @RequestParam("files") MultipartFile[] files) {
System.out.println("{ sex: " + name + ", sex: " + sex + " }");
for (MultipartFile file : files) {
System.out.println(file.getOriginalFilename());
}
}
复合类型 multipart 允许存在多种媒体类型,有文本类型以及文件,并且能够成功地接收这些数据。
标签:媒体,6838,sex,RFC,MIME,类型 来源: https://www.cnblogs.com/shiramashiro/p/16210681.html