MIME 类型简介
MIME 直译的意思是多功能互联网邮件扩展,它是一套描述消息内容类型(即文件的媒体类型)的因特网标准。从名字不难理解,MIME 设计的最初目的,是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。发展到现在,被 HTTP 协议支持之后,它使得在互联网传输的内容不仅是普通的文本,还可以是图像、音频、视频等表现力更加丰富的内容。
MIME 消息可以包含文本、图像、音频、视频以及其他应用程序专用的数据(如:Adobe Photoshop 应用程序)。每个 MIME 类型由两部分组成,由 /
分隔。前面是数据的大类别,例如 text(文本)、image(图象)、audio(声音)等;在后面定义具体的种类。如:text/javascript
,image/png
,audio/midi
都是合法且常见的 MIME 类型。
Internet 中有一个专门的组织 IANA(互联网数字分配机构)来确认标准的 MIME 类型,通常,只有一些在互联网上获得广泛应用的格式才会获得一个 MIME Type。但互联网发展的太快,很多应用程序等不及 IANA 将他们使用的 MIME 类型纳入标准类型。因此,他们使用在类别中以 application/x-***
开头的方法来标识这个类别还没有成为标准,例如:x-gzip
,x-tar
等。事实上,这些类型运用广泛,已经成为了事实标准。只要客户端和服务器端共同承认这个 MIME 类型,即使它是不标准的类型也没有关系,客户端程序就能根据 MIME 类型,采用对应的处理方式来处理数据。
官方的 MIME 信息是由 IETF (Internet Engineering Task Force) 组织管理和维护。
主流编程语言获取文件 MIME 的方法
PHP
作为全世界最好的编程语言,PHP 获取文件 MIME 方法如下:
// 获取文件 MIME 类型
function get_mime_type($file) {
if (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $file);
finfo_close($finfo);
} else {
$mimetype = mime_content_type($file);
}
if (empty($mimetype)) {
$mimetype = 'application/octet-stream';
}
return $mimetype;
}
Javascript
Javascript 作为使用最广泛的脚本语言之一,在客户端验证文件类型是一种常见的场景。下面是通过 JS 查看文件类型的方法。
首先,在页面上定义一个文件上传控件:
<input type="file" id="fileUploader" multiple>
获取文件类型方法如下:
// 获取上传控件
var uploader = document.getElementById("fileUploader");
// 监听上传控件的 change 事件
uploader.addEventListener("change", function(event) {
var files = uploader.files,
for (var i = 0; i < files.length; i++) {
console.log("文件名:" + files[i].name);
console.log("文件类型" + files[i].type);
console.log("文件大小" + files[i].size + " 字节");
}
}, false);
Java
Java 是目前最流行的后端编程语言,通过 Java 获取文件 MIME 类型有多种方式,介绍如下。
1、在 Java 7(及其以上版本),可以这样获取:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Test {
public static void main(String[] args) throws IOException {
Path source = Paths.get("c:/temp/bady.png");
// 将输出 image/png
System.out.println(Files.probeContentType(source));
}
}
2、使用 javax.activation.MimetypesFileTypeMap
对象获取 MIME 类型
import javax.activation.MimetypesFileTypeMap;
import java.io.File;
class GetMimeType {
public static void main(String args[]) {
File f = new File("loading.gif");
// 将输出 image/gif
System.out.println(new MimetypesFileTypeMap().getContentType(f));
}
}
3、使用 java.net.URL
对象获取 MIME 类型
import java.net.*;
public class FileUtils{
public static void main(String args[]) {
URL url = new URL("file://c:/your/path/cache/test.txt");
URLConnection uc = url.openConnection();;
String type = uc.getContentType();
// 将输出 text/plain
System.out.println(type);
}
}
附:MIME 类型定义标准和出处
- RFC-822: 表示 ARPA 因特网文字信息
- RFC-2045 MIME Part 1:定义了因特网消息体格式
- RFC-2046 MIME Part 2:定义了媒体类型的 MIME Type
- RFC-2047 MIME Part 3:定义了非 ASCII 文本头部扩展
- RFC-2048 MIME Part 4:定义了应用程序注册标准
- RFC-2049 MIME Part 5:包含一致性准则的说明和一些示例