概述

多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。

内容类型(Content-Type),这个头部领域用于指定消息的类型。一般以下面的形式出现:[type]/[subtype]

type有下面的形式:

Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;

Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;

Application:用于传输应用程序数据或者二进制数据;
Message:用于包装一个E-mail消息;

Image:用于传输静态图片数据;
Audio:用于传输音频或者音声数据;

Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。

subtype用于指定type的详细形式。content-type/subtype配对的集合和与此相关的参数,将随着时间而增长。为了确保这些值在一个有序而且公开的状态下开发,MIME使用Internet
Assigned Numbers Authority (IANA)作为中心的注册机制来管理这些值。

常用的subtype值如下所示:

text/plain(纯文本)
text/html(HTML文档)

application/xhtml+xml(XHTML文档)
image/gif(GIF图像)

image/jpeg(JPEG图像)【PHP中为:image/pjpeg】

image/png(PNG图像)【PHP中为:image/x-png】
video/mpeg(MPEG动画)

application/octet-stream(任意的二进制数据)
application/pdf(PDF文档)

application/msword(Microsoft Word文件)
message/rfc822(RFC 822形式)

multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)

application/x-www-form-urlencoded(使用HTTP的POST方法提交的表单)

multipart/form-data(同上,但主要用于表单提交时伴随文件上传的场合)


Android中MimeType的用途

Intent-Filter中的<data>有一个mimeType .
它的作用是告诉Android系统本Activity可以处理的文件的类型。如设置为 “text/plain”表示可以处理“.txt”文件。

MimeTypeMap类:是专门处理mimeType的类。

  1. package android.webkit;
  2.  
  3. import android.text.TextUtils;
  4. import java.util.regex.Pattern;
  5. import libcore.net.MimeUtils;
  6.  
  7. public class MimeTypeMap {
  8. private static final MimeTypeMap sMimeTypeMap = new MimeTypeMap();
  9.  
  10. private MimeTypeMap() {
  11. }
  12.  
  13. public static String getFileExtensionFromUrl(String url) {
  14. if (!TextUtils.isEmpty(url)) {
  15. int fragment = url.lastIndexOf('#');
  16. if (fragment > 0) {
  17. url = url.substring(0, fragment);
  18. }
  19.  
  20. int query = url.lastIndexOf('?');
  21. if (query > 0) {
  22. url = url.substring(0, query);
  23. }
  24.  
  25. int filenamePos = url.lastIndexOf('/');
  26. String filename =
  27. 0 <= filenamePos ? url.substring(filenamePos + 1) : url;
  28.  
  29. if (!filename.isEmpty() &&
  30. Pattern.matches("[a-zA-Z_0-9\\.\\-\\(\\)\\%]+", filename)) {
  31. int dotPos = filename.lastIndexOf('.');
  32. if (0 <= dotPos) {
  33. return filename.substring(dotPos + 1);
  34. }
  35. }
  36. }
  37.  
  38. return "";
  39. }
  40.  
  41. public boolean hasMimeType(String mimeType) {
  42. return MimeUtils.hasMimeType(mimeType);
  43. }
  44.  
  45. public String getMimeTypeFromExtension(String extension) {
  46. return MimeUtils.guessMimeTypeFromExtension(extension);
  47. }
  48.  
  49. private static String mimeTypeFromExtension(String extension) {
  50. return MimeUtils.guessMimeTypeFromExtension(extension);
  51. }
  52.  
  53. public boolean hasExtension(String extension) {
  54. return MimeUtils.hasExtension(extension);
  55. }
  56.  
  57. public String getExtensionFromMimeType(String mimeType) {
  58. return MimeUtils.guessExtensionFromMimeType(mimeType);
  59. }
  60.  
  61. /* package */ String remapGenericMimeType(String mimeType, String url,
  62. String contentDisposition) {
  63.  
  64. if ("text/plain".equals(mimeType) ||
  65.  
  66. String filename = null;
  67. if (contentDisposition != null) {
  68. filename = URLUtil.parseContentDisposition(contentDisposition);
  69. }
  70. if (filename != null) {
  71. url = filename;
  72. }
  73. String extension = getFileExtensionFromUrl(url);
  74. String newMimeType = getMimeTypeFromExtension(extension);
  75. if (newMimeType != null) {
  76. mimeType = newMimeType;
  77. }
  78. } else if ("text/vnd.wap.wml".equals(mimeType)) {
  79.  
  80. mimeType = "text/plain";
  81. } else {
  82. if ("application/vnd.wap.xhtml+xml".equals(mimeType)) {
  83. mimeType = "application/xhtml+xml";
  84. }
  85. }
  86. return mimeType;
  87. }
  88.  
  89. public static MimeTypeMap getSingleton() {
  90. return sMimeTypeMap;
  91. }
  92. }

MimeTypeMap类是单例模式的,既没有公有的构造方法。使用getSinglton()方法获得MimeTypeMap对象:

示例代码一:

  1. MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
  2. //MimeTypeMap中是否有txt的MimeType
  3. System.out.println(mimeTypeMap.hasExtension("txt"));
  4. System.out.println(mimeTypeMap.hasMimeType("text/html"));
  5. //获得txt文件类型的MimeType
  6. String extension = mimeTypeMap.getMimeTypeFromExtension("txt");
  7. System.out.println(extension);

示例代码二:

  1. private String getMIMEType(File file)
  2.  
  3. {
  4.  
  5. String type = "*";
  6.  
  7. String end = file.getName().substring(dotIndex, file.getName().length()).toLowerCase();
  8.  
  9. if (end == "")
  10. return type;
  11.  
  12. //在MIME和文件类型的匹配表中找到对应的MIME类型。
  13.  
  14. for (int i = 0; i < MIME_MapTable.length; i++) {
  15.  
  16. if (end.equals(MIME_MapTable[i][0]))
  17.  
  18. type = MIME_MapTable[i][1];
  19.  
  20. }
  21.  
  22. return type;
  23.  
  24. }
  25.  
  26. private void openFile(File file) {
  27.  
  28. //Uri uri = Uri.parse("file://"+file.getAbsolutePath());
  29.  
  30. Intent intent = new Intent();
  31.  
  32. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  33.  
  34. //设置intent的Action属性
  35.  
  36. intent.setAction(Intent.ACTION_VIEW);
  37.  
  38. //获取文件file的MIME类型
  39.  
  40. String type = getMIMEType(file);
  41.  
  42. //设置intent的data和Type属性。
  43.  
  44. intent.setDataAndType(Uri.fromFile(file), type);
  45.  
  46. //跳转
  47.  
  48. startActivity(intent);
  49.  
  50. }
  51.  
  52. private final String[][] MIME_MapTable = {
  53.  
  54. //{后缀名, MIME类型}
  55.  
  56. {".3gp", "video/3gpp"},
  57.  
  58. {".apk", "application/vnd.android.package-archive"},
  59.  
  60. {".asf", "video/x-ms-asf"},
  61.  
  62. {".avi", "video/x-msvideo"},
  63.  
  64. {".bin", "application/octet-stream"},
  65.  
  66. {".bmp", "image/bmp"},
  67.  
  68. {".c", "text/plain"},
  69.  
  70. {".class", "application/octet-stream"},
  71.  
  72. {".conf", "text/plain"},
  73.  
  74. {".cpp", "text/plain"},
  75.  
  76. {".doc", "application/msword"},
  77.  
  78. {".exe", "application/octet-stream"},
  79.  
  80. {".gif", "image/gif"},
  81.  
  82. {".gtar", "application/x-gtar"},
  83.  
  84. {".gz", "application/x-gzip"},
  85.  
  86. {".h", "text/plain"},
  87.  
  88. {".htm", "text/html"},
  89.  
  90. {".html", "text/html"},
  91.  
  92. {".jar", "application/java-archive"},
  93.  
  94. {".java", "text/plain"},
  95.  
  96. {".jpeg", "image/jpeg"},
  97.  
  98. {".jpg", "image/jpeg"},
  99.  
  100. {".js", "application/x-javascript"},
  101.  
  102. {".log", "text/plain"},
  103.  
  104. {".m3u", "audio/x-mpegurl"},
  105.  
  106. {".m4a", "audio/mp4a-latm"},
  107.  
  108. {".m4b", "audio/mp4a-latm"},
  109.  
  110. {".m4p", "audio/mp4a-latm"},
  111.  
  112. {".m4u", "video/vnd.mpegurl"},
  113.  
  114. {".m4v", "video/x-m4v"},
  115.  
  116. {".mov", "video/quicktime"},
  117.  
  118. {".mp2", "audio/x-mpeg"},
  119.  
  120. {".mp3", "audio/x-mpeg"},
  121.  
  122. {".mp4", "video/mp4"},
  123.  
  124. {".mpc", "application/vnd.mpohun.certificate"},
  125.  
  126. {".mpe", "video/mpeg"},
  127.  
  128. {".mpeg", "video/mpeg"},
  129.  
  130. {".mpg", "video/mpeg"},
  131.  
  132. {".mpg4", "video/mp4"},
  133.  
  134. {".mpga", "audio/mpeg"},
  135.  
  136. {".msg", "application/vnd.ms-outlook"},
  137.  
  138. {".ogg", "audio/ogg"},
  139.  
  140. {".pdf", "application/pdf"},
  141.  
  142. {".png", "image/png"},
  143.  
  144. {".pps", "application/vnd.ms-powerpoint"},
  145.  
  146. {".ppt", "application/vnd.ms-powerpoint"},
  147.  
  148. {".prop", "text/plain"},
  149.  
  150. {".rar", "application/x-rar-compressed"},
  151.  
  152. {".rc", "text/plain"},
  153.  
  154. {".rmvb", "audio/x-pn-realaudio"},
  155.  
  156. {".rtf", "application/rtf"},
  157.  
  158. {".sh", "text/plain"},
  159.  
  160. {".tar", "application/x-tar"},
  161.  
  162. {".tgz", "application/x-compressed"},
  163.  
  164. {".txt", "text/plain"},
  165.  
  166. {".wav", "audio/x-wav"},
  167.  
  168. {".wma", "audio/x-ms-wma"},
  169.  
  170. {".wmv", "audio/x-ms-wmv"},
  171.  
  172. {".wps", "application/vnd.ms-works"},
  173.  
  174. //{".xml", "text/xml"},
  175.  
  176. {".xml", "text/plain"},
  177.  
  178. {".z", "application/x-compress"},
  179.  
  180. {".zip", "application/zip"},
  181.  
  182. {"", "*/*"}
  183.  
  184. };

Android MineType的更多相关文章

  1. Android Intent的花样启动

    刚开始看郭大神的<>,实现以下里面的一些例子.Intent的花样启动 显示Intent的使用. 实例化一个Intent,并且制定当前的activity和要跳转到的activity Inte ...

  2. Android 基础知识 -- Intent

    Intent (意图) Android通信的桥梁,可以通过Intent启动Activity , Service , 发送指定广播到Receiver <1> 启动Activity : sta ...

  3. 更多隐式Intent用法

    上几篇无论是显示的Intent或者隐式的Intent,都是要跳转的自己添加指定的页面,如果想要跳转到百度首页或者跳转到联系人面板等,前面的知识显然是很不实用的.这里,将要针对其它的一些Intent用法 ...

  4. Android DownloadProvider学习 (二)

    DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息,这两个类的具体功能会在后面穿插介绍.DownloadManager的源码可见 ...

  5. Android WebView 开发教程

    声明在先:必须在AndroidMainfest.xml 里面声明权限,否则在Java里面编写的所有WebView浏览网页的代码都无法正常使用 <uses-permission android:n ...

  6. java攻城狮之路(Android篇)--widget_webview_metadata_popupwindow_tabhost_分页加载数据_菜单

    一.widget:桌面小控件1 写一个类extends AppWidgetProvider 2 在清单文件件中注册: <receiver android:name=".ExampleA ...

  7. java攻城狮之路(Android篇)--ListView与ContentProvider

    一.ListView 1.三种Adapter构建ListView ListView添加条目的时候, 可以使用setAdapter(ListAdapter)方法, 常用的ListAdapter有三种 B ...

  8. Android WebView 开发详解(一)

    转载请注明出处  http://blog.csdn.net/typename/article/details/39030091 powered by meichal zhao 概览: Android ...

  9. Android 下载模块分析(DownloadManager和DownloadProvider)

    Android下载模块主要有2个部分组成:DownloadManager和DownloadProvider:其中DownloadManager提供接口供调用,具体的实现是 DownloadProvid ...

随机推荐

  1. Windows7用VirtualBox虚拟Ubuntu共享文件夹的终极方式

    在Win7用VirtualBox虚拟机安装Ubuntu后,共享文件夹再也不用手工mount了 安装增强工具包 设置共享文件夹后 VB已经自动挂载Windows文件夹到 /media/sf_*** 目录 ...

  2. C# Winform 禁止一个进程运行多次

    禁止一个进程运行多次 using System; using System.Windows.Forms; namespace StartExe { static class Program { /// ...

  3. web开发:css总结与应用

    一.常用标签的使用 二.边界圆角 三.背景样式 四.精灵图 五.盒模型布局细节 六.盒模型案例 七.w3c主页 一.常用标签的使用 <!DOCTYPE html> <html> ...

  4. 关于SendMessage和PostMessage的理解的例子

    对于SendMessage 和 PostMessage 平时口头的解释是 SendMessage 发送消息后等待返回, PostMessage 发送消息后立即返回 . 但是这样解释还是不具体,什么叫等 ...

  5. JavaScript教程——对象的继承

    面向对象编程很重要的一个方面,就是对象的继承.A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法.这对于代码的复用是非常有用的. 大部分面向对象的编程语言,都是通过“类”(class) ...

  6. Elasticsearch:运用scroll接口对大量数据实现更好的分页

    在Elasticsearch中,我们可以通过size和from来对我们的结果来进行分页.但是对于数据量很大的索引,这是有效的吗?Scroll API可用于从单个搜索请求中检索大量结果(甚至所有结果), ...

  7. RunTime.getRunTime().addShutdownHook 添加钩子

    Runtime.getRuntime().addShutdownHook(shutdownHook); google了一下它的含义:在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设 ...

  8. 【转】别人写的pe代码

    // PEOperate.cpp: implementation of the PEOperate class. // //////////////////////////////////////// ...

  9. CI环境搭建下-Jenkis与git结合

     设置权限:  也可以通过公私钥的方式,添加权限,公私钥填写在gitblit用户中心:  Jenkins中填写私钥: 添加: 添加后如果仍然报错,是因为windows下要使用http的地址. 在此,可 ...

  10. PHP mysqli_fetch_field() 函数

    返回结果集中下一字段(列),然后输出每个字段名称.表格和最大长度: <?php // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_connect ...