精华内容
下载资源
问答
  • MIME type
    2018-04-20 11:00:03

    首先,我们要了解浏览器是如何处理内容的。在浏览器中显示的内容有 HTML、有 XML、有 GIF、还有 Flash ……那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 MIME Type,也就是该资源的媒体类型。

    媒体类型通常是通过 HTTP 协议,由 Web 服务器告知浏览器的,更准确地说,是通过 Content-Type 来表示的,例如:

    Content-Type: text/HTML

    表示内容是 text/HTML 类型,也就是超文本文件。为什么是“text/HTML”而不是“HTML/text”或者别的什么?MIME Type 不是个人指定的,是经过 ietf 组织协商,以 RFC 的形式作为建议的标准发布在网上的,大多数的 Web 服务器和用户代理都会支持这个规范 (顺便说一句,Email 附件的类型也是通过 MIME Type 指定的)。

    通常只有一些在互联网上获得广泛应用的格式才会获得一个 MIME Type,如果是某个客户端自己定义的格式,一般只能以 application/x- 开头。

    XHTML 正是一个获得广泛应用的格式,因此,在 RFC 3236 中,说明了 XHTML 格式文件的 MIME Type 应该是 application/xHTML+XML。

    当然,处理本地的文件,在没有人告诉浏览器某个文件的 MIME Type 的情况下,浏览器也会做一些默认的处理,这可能和你在操作系统中给文件配置的 MIME Type 有关。比如在 Windows 下,打开注册表的“HKEY_LOCAL_MACHINESOFTWAREClassesMIMEDatabaseContent Type”主键,你可以看到所有 MIME Type 的配置信息。

    二、
    在把输出结果传送到浏览器上的时候,浏览器必须启动适当的应用程序来处理这个输出文档。这可以通过多种类型MIME(多功能网际邮件扩充协议)来完成。在HTTP中,MIME类型被定义在Content-Type header中。

    例如,架设你要传送一个Microsoft Excel文件到客户端。那么这时的MIME类型就是“application/vnd.ms-excel”。在大多数实际情况中,这个文件然后将传送给Execl来处理(假设我们设定Execl为处理特殊MIME类型的应用程序)。在ASP中,设定MIME类型的方法是通过Response对象的ContentType属性。

    多媒体文件格式MIME

    最早的HTTP协议中,并没有附加的数据类型信息,所有传送的数据都被客户程序解释为超文本标记语言HTML 文档,而为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。

    MIME意为多目Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。

    每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。

    常见的MIME类型

    超文本标记语言文本 .html,.html text/html
    普通文本 .txt text/plain
    RTF文本 .rtf application/rtf
    GIF图形 .gif image/gif
    JPEG图形 .ipeg,.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

    Internet中有一个专门组织IANA来确认标准的MIME类型,但Internet发展的太快,很多应用程序等不及IANA来确认他们使用的MIME类型为标准类型。因此他们使用在类别中以x-开头的方法标识这个类别还没有成为标准,例如:x-gzip,x-tar等。事实上这些类型运用的很广泛,已经成为了事实标准。只要客户机和服务器共同承认这个MIME类型,即使它是不标准的类型也没有关系,客户程序就能根据MIME类型,采用具体的处理手段来处理数据。而Web服务器和浏览器(包括操作系统)中,缺省都设置了标准的和常见的MIME类型,只有对于不常见的 MIME类型,才需要同时设置服务器和客户浏览器,以进行识别。

    由于MIME类型与文档的后缀相关,因此服务器使用文档的后缀来区分不同文件的MIME类型,服务器中必须定义文档后缀和MIME类型之间的对应关系。而客户程序从服务器上接收数据的时候,它只是从服务器接受数据流,并不了解文档的名字,因此服务器必须使用附加信息来告诉客户程序数据的MIME类型。服务器在发送真正的数据之前,就要先发送标志数据的MIME类型的信息,这个信息使用Content-type关键字进行定义,例如对于HTML文档,服务器将首先发送以下两行MIME标识信息,这个标识并不是真正的数据文件的一部分。

    Content-type: text/html

    注意,第二行为一个空行,这是必须的,使用这个空行的目的是将MIME信息与真正的数据内容分隔开。

    MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。
    MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
    官方的 MIME 信息是由 Internet Engineering Task Force (IETF) 在下面的文档中提供的:
    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
    不同的应用程序支持不同的 MIME 类型。

    文章来源:
    https://zhidao.baidu.com/question/306468835963644404.html

    补下:
    MIME参考手册:
    http://www.w3school.com.cn/media/media_mimeref.asp

    更多相关内容
  • mimetype-js概述我发现继续为MIME类型制作这些文件扩展名查找表。 是时候把它放在一个模块中来省去麻烦了。例子一般情况var mimetype = require ( 'mimetype' ) ;console . log ( mimetype . lookup ( "myfile.txt" ...
  • 常用文件的mime和mimetype,几乎包括所有文件,大概有1000多项
  • java-enum-mimetype MIME 类型的 Java 枚举类初始来源:
  • 常见文件的扩展名对应mimetype的对应关系列表,csv格式可使用excel打开,方便查看。或者制作成项目内工具类调用判断。
  • 主要介绍了MIME-Types MIME 类型集合,服务器就是以MIME-Types类型来处理这些请求,一般客户端进行处理
  • MimeType Enforcer-crx插件

    2021-04-02 04:43:41
    语言:English 将默认的mimetypes添加到.css和.js文件 向.css和.js文件添加默认的mimetypes。 这在其他内容中是有用的,以便使用Chrome的内置本地静态文件服务器的本机ES模块。
  • Ext-To-MimeType模式ExtToMime是一个JavaScript模块,为您提供一种将文件扩展名映射到MimeType / CodeMirror模式的简便方法。 您可以为模块提供不带点的文件扩展名,然后将返回CodeMirror模式。要求该模块需要满足...
  • 介绍一个php获得文件的mime type类,需要的朋友可以下载下来学习和参考。
  • Sudoo-Mimetype :file_folder: Mimetype处理程序 安装 yarn add @sudoo/mimetype # Or npm install @sudoo/mimetype --save 用法 该软件包提供了多个mimetype集合。 通过扩展名将mimetype与以下代码匹配。 import ...
  • Linux MIME type

    2021-05-15 04:56:07
    什么是MIME TypeMIME Type是用于描述文件的类型的一种表述方法,其将文件划分为多种类型,方便对其进行统一的管理。MIME Type指定了文件的类型名称、描述、图标信息,同时通过与.desktop应用程序描述文件整合,指定...

    什么是MIME Type

    MIME Type是用于描述文件的类型的一种表述方法,其将文件划分为多种类型,方便对其进行统一的管理。

    MIME Type指定了文件的类型名称、描述、图标信息,同时通过与.desktop应用程序描述文件整合,指定了文件的打开方式。

    MIME type是被file manager使用,而不是Gnome或者Ubuntu系统本身。

    以GIMP的.desktop为例说明:

    [Desktop Entry]

    Version=1.0

    Type=Application

    Name=GNU Image Manipulation Program

    GenericName=Image Editor

    Comment=Create images and edit photographs

    Exec=gimp-2.7 %U

    TryExec=gimp-2.7

    Icon=gimp

    Terminal=false

    Categories=Graphics;2DGraphics;RasterGraphics;GTK;

    X-GNOME-Bugzilla-Bugzilla=GNOME

    X-GNOME-Bugzilla-Product=GIMP

    X-GNOME-Bugzilla-Component=General

    X-GNOME-Bugzilla-Version=2.7.2

    X-GNOME-Bugzilla-OtherBinaries=gimp-2.7

    StartupNotify=true

    MimeType=application/postscript;application/pdf;image/bmp;image/g3fax;image/gif;image/x-fits;image/pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-sgi;image/x-tga;image/x-xbitmap;image/x-xwindowdump;image/x-xcf;image/x-compressed-xcf;image/tiff;image/jpeg;image/x-psp;image/png;image/x-icon;image/x-xpixmap;image/svg+xml;application/pdf;image/x-wmf;image/jp2;image/jpeg2000;image/jpx;image/x-xcursor;

    MimeType字段说明了这个程序支持的MIME types

    Exec字段说明了程序的打开方式,Exec字段最后的%U或%f很重要,其决定了这个程序时候能显示在文件管理器的open with清单中。

    谁来决定MIME type的默认程序

    mime文件类型描述文件,定义了每个MIME type的特征参数,以及每个何种类型的文件归属到这个MIME下

    .desktop应用程序描述文件,说明了程序的打开方式,也指定了其支持的MIME type

    mimeinfo.cache 通过抓取.desktop文件的MIME字段信息,将上述两种描述文件合二为一,形成一个查询数据库,每个MIME type文件打开时,将通过这个文件寻找打开程序。

    如果一个MIME type对应到多个.desktop应用程序描述文件,通过抓取而来的mimeinfo.cache并不能决定谁更优先,因为多个.desktop文件之间并没有优先级定义。面对这个场景,最终的默认程序是由mimeapps.list文件定夺的,其由用户人工配置,决定同一个MIME type对应多个.desktop程序时,哪个程序优先级更高,更高优先级的程序即是族中的默认程序。mimeapps.list在系统中有多个路径存在,每个路径的优先级是不同的,修改时需要注意。

    Freedesktop标准化

    在旧时代,KDE和GNOME各自为政,为了在不同的Desktop Manager上统一应用程序打开方法,Freedesktop.org组织定义了多个标准规范,以实现应用的统一管理:

    Shared MIME database文件类型描述数据库,这个数据库描述了每一个文件类型(MIME type)的参数特征(名称、、别名、描述、图标),以及满足何种条件才能将其划分到对应的MIME类别。

    MIME type描述文件,位于/usr/share/mime/packages/(.xml),其每一个文件类型(MIME type)的参数特征(名称、、别名、描述、图标),以及满足何种条件才能将其划分到对应的MIME类别。

    单独索引每个MIME type描述文件是非常不高效的,所以Freedesktop引入了Shared MIME database,其是一个静态数据库(文本文件/usr/share/mime/mime.cache 此cache文件不建议用户修改,可以通过修改上述静态数据库,并通过update-mime-database /usr/share/mime/命令更新cache文件),描述了每个MIME type的特征。初期的数据整合了早期KDE和GNOME的文件类型描述信息,并逐步更新。

    用户可以自定义自己描述的MIME type描述文件到/usr/share/mime/packages/(.xml),并通过update-mime-database /usr/share/mime/ 命令更新到数据库文件中。

    Desktop Entry specification应用程序描述文件(.desktop),这个文件描述了系统上安装的应用程序的参数特征(名称、启动方法、图标、支持的MIME type)。这个描述文件除了用于打开程序外本身、打开MIME type文件的关联程序,还负责提供给Desktop Manager构建应用程序Menu和索引)

    mime-apps-spec-1.0关联MIME type和application,标准规定了一个文件可以默认被哪个应用程序(上述Desktop Entry specification定义)打开、如何修改默认打开程序、如何增加删除MIME type与application的关联。

    每个应用程序描述文件虽然已经指定了各自支持的MIME type,但是如果每次文件打开前都去遍历一边所有的描述文件,执行效率将会非常低下。所以就需要一个关联数据库,负责将application(应用程序描述文件)与MIME type(Shared MIME Database)对应起来。这个数据库是一个文本文件静态数据库(/usr/share/applications/mimeinfo.cache 此cache文件不建议用户修改,可以通过修改每个单独的.desktop文件,并通过update-desktop-database /usr/share/mime/命令更新数据库)。

    用户可以自定义应用程序的打开方式到/usr/share/appliacaions(.desktop),并通过update-desktop-database /usr/share/applications/命令更新到数据库中。

    文件默认打开程序优先级

    参考URL:https://wiki.debian.org/MIME (最终改变了作者对mimeapps.list和mimeinfo.cache的关系的认识,以及整个MIME体系的认识)

    update-desktop-database程序通过从每个.desktop文件中抓取其关联的MIME type,并形成mime type与application关联数据库,但是因为是抓取的方式获得的关联关系,如果一个mime type对应有多个application(.desktop),则mimeinfo.cache数据库是不能分辨出优先级的。

    这时就需要另一个与mimeinfo.cache数据库格式相似的文件mimeapps.list,其负责指定每个mime type在发生多程序关联时,哪个程序优先级高,mimeapps.list在系统中有多个路径存在,见下表(文件优先级自高到底):

    Path

    Usage

    $XDG_CONFIG_HOME/$desktop-mimeapps.list

    user overrides, desktop-specific (for advanced users)

    $XDG_CONFIG_HOME/mimeapps.list

    user overrides (recommended location for user configuration GUIs)

    $XDG_CONFIG_DIRS/$desktop-mimeapps.list

    sysadmin and ISV overrides, desktop-specific

    $XDG_CONFIG_DIRS/mimeapps.list

    sysadmin and ISV overrides

    $XDG_DATA_HOME/applications/$desktop-mimeapps.list

    for completeness, deprecated, desktop-specific

    $XDG_DATA_HOME/applications/mimeapps.list

    for compatibility, deprecated

    $XDG_DATA_DIRS/applications/$desktop-mimeapps.list

    distribution-provided defaults, desktop-specific

    $XDG_DATA_DIRS/applications/mimeapps.list

    distribution-provided defaults

    注意1:mimeapps.list的前身是defaults.list,但是已经被废弃不用了。参考URL:https://wiki.archlinux.org/index.php/Default_applications

    注意2:如果修改了mimeapps.list文件,且更新了数据库缓存,但是依旧不生效,就需要看一下修改的文件的优先级,有没有更高级别的文件覆盖了你的操作。

    作者一开始没有搞清楚整个工作模式时,是使用strace跟踪nautilus才发现的这个问题。

    查看文件的MIME type及其该MIME关联的application打开方式:

    ray@ray-ThinkPad-X250:~/Desktop$ mimetype topo-WLAN.graphml

    topo-WLAN.graphml: application/yed

    ray@ray-ThinkPad-X250:~/Desktop$ gvfs-mime --query application/yed

    Default application for 'application/yed': yEd.desktop

    Registered applications:

    yEd.desktop

    Recommended applications:

    yEd.desktop

    ray@ray-ThinkPad-X250:~/Desktop$

    不建议使用xdg-mime query filetype命令查看MIME打开方式,其通过/usr/share/mime/目录下的文件决定输出内容,如果mime-type是通过alias定义的,没有实际的文件,则查找失败。

    gvfs-mime虽然也是读取/usr/share/mime目录下的文件,但是它可以识别出alias,虽然有时候也是不准确!!!

    自定义MIME TYPE,并指定打开程序

    自定义MIME TYPE

    icon 自定义:

    http://techmonks.net/how-to-add-a-custom-filetype-to-linux/

    https://help.ubuntu.com/community/AddingMimeTypes

    https://wiki.archlinux.org/index.php/Icons

    Linux 的icons也分为很多种类,专门的icon theme都会分类到指定的icon类别(不同的目录),mimetypes也是专门的目录。

    用户自己创建的mimetypes icons存放在~/.local/share/icons目录的子目录mimetypes下:

    ray@ray-ThinkPad-X250:~/.local/share/icons$ ls -al ~/.local/share/icons/hicolor/32x32/mimetypes/

    total 12

    drwx------ 2 ray ray 4096 Feb 28 12:32 .

    drwx------ 4 ray ray 4096 Feb 28 12:32 ..

    lrwxrwxrwx 1 ray ray 7 Feb 28 12:32 gnome-mime-yEd.png -> yEd.png

    -rw------- 1 ray ray 1922 Feb 28 12:32 yEd.png

    ray@ray-ThinkPad-X250:~/.local/share/icons$ ls -al ~/.local/share/icons/hicolor/32x32/apps

    total 12

    drwx------ 2 ray ray 4096 Feb 26 16:30 .

    drwx------ 4 ray ray 4096 Feb 28 12:32 ..

    -rw------- 1 ray ray 1350 Feb 26 16:30 chrome-coobgpohoikkiipiblmjeljniedjpjpf-Default.png

    ray@ray-ThinkPad-X250:~/.local/share/icons$

    配置自定义mime icon步骤如下:

    寻找一个png文件,并确定其尺寸大小。(文件属性可以看到)

    不用复制文件到上述mimetypes icon目录,使用如下命令实现:

    xdg-icon-resource install --size 32 --context mimetypes yEd.png

    更新MIME数据库

    sudo update-mime-database /usr/share/mime

    配置.desktop文件关联MIME TYPE

    ray@ray-ThinkPad-X250:~/.local/share/applications$ sudo vim ~/.local/share/applications/yED.desktop

    #!/usr/bin/env xdg-open

    [Desktop Entry]

    Type=Application

    Name=yEd Graph Editor

    Exec=/bin/sh "/home/ray/Applications/yEd/yEd" %f

    Icon=/home/ray/Applications/yEd/.install4j/yEd.png

    Categories=Player;

    MimeType=application/yed;

    更新.desktop文件与MIME TYPE关联数据库

    $ update-desktop-database ~/.local/share/applications

    4617e8e600ad

    image.png

    4617e8e600ad

    image.png

    thunderbird下的MIME

    通过strace可以发现Thunderbird调用了/etc/mailcap和/etc/mime.types文件(有限调用用户目录下的~/.mimetypes文件)决定文件的打开方式,这两个文件是通过update-mime命令更新维护的,区别与前边的update-mime-database。

    正常情况下thunderbird与系统文件系统的标准MIME配置是一样的,可以正确的识别文件的MIME类型并对应打开程序。

    但是thunderbird的MIME类型判断不完全是通过扩展名来检测的,thunderbird使用邮件系统的正文(源代码)指定的MIME类型和附件的扩展名联合来寻找关联的application,正常情况下也是没有问题的,但是。。。。。。总有一些不守规矩的邮件内容(尤其是一些垃圾第三方邮件客户端),会指定错误的MIME类型,比如将xls和xlsx混淆关联,所以将会导致thunderbird判断不出文件的MIME类型,进而无法提供默认的application,所以会经常看到默认的gedit程序总是被“宠幸”作为last backup。

    目前还没有找到好的办法解决这个问题,随后再研究吧。

    2016.08.03 找到两个之前版本靠谱的Thunderbird Add-on:

    OPENATTACHMENTBYEXTENSION

    根据文件扩展名来选择打开的程序,可以解决Thunderbird下的问题,但是最新版本测试结果是中文文件打开还是有问题,charset设备为gb2312也是不可以的。

    Gnome Open或OpenX

    要求DM必须是GNOME,通过调用gnome-open程序让Nautilus来判断文件类型,并选择合适的打开方式。它会生成一个新的MIME分类到thunderbird,名字是"application/gnomeopen",强制指定通过/usr/bin/gnome-open程序打开。再通过插件Overlay的方式替换掉thunderbird处理附件的JS脚本,修改脚本打开附件的方法固定使用"applicaiton/gnomeopen"这个MIME。测试结果是已经失效,应该是JS脚本因为版本升级发生了变化,自己尝试修改也未果。

    最终的可用的方法是,通过Gnome Open插件带来的灵感,在unknow文件打开时,选择打开方式为/usr/bin/gnome-open,简化操作。

    展开全文
  • 关于mime type的文章

    2019-05-27 01:38:28
    NULL 博文链接:https://zongyukai20070419095606.iteye.com/blog/565492
  • java获取文件的mime type

    2021-04-23 06:18:33
    方法一@Testpublic void whenUsingJava7_thenSuccess() {Path path = new File("product....String mimeType = Files.probeContentType(path);assertEquals(mimeType, "image/png");}此方法需要java 7及以上。Files....

    方法一

    @Test

    public void whenUsingJava7_thenSuccess() {

    Path path = new File("product.png").toPath();

    String mimeType = Files.probeContentType(path);

    assertEquals(mimeType, "image/png");

    }

    此方法需要java 7及以上。Files.probeContentType使用已经安装的FileTypeDetector实现类的probeContentType方法来解析获得文件的的Mime Type。

    如果其中一个实现能够识别解析该文件则立即返回,如果不能则使用系统默认实现类来解析识别。对于使用系统默认实现可能导致的失败会由于系统的差异而不同。另外如果文件不存在或者文件没有后缀名也会导致失败。

    目前测试基本文件类型都能够解析成功,附上Files.probeContentType源码

    public static String probeContentType(Path path)

    throws IOException

    {

    // try installed file type detectors

    for (FileTypeDetector detector: FileTypeDetectors.installeDetectors) {

    String result = detector.probeContentType(path);

    if (result != null)

    return result;

    }

    // fallback to default

    return FileTypeDetectors.defaultFileTypeDetector.probeContentType(path);

    }

    方法二

    我们可以使用URLConnection.getContentType()方法来获取Mine Type,但是这个方法的主要缺陷就是太慢了。

    @Test

    public void whenUsingGetContentType_thenSuccess(){

    File file = new File("product.png");

    URLConnection connection = file.toURL().openConnection();

    String mimeType = connection.getContentType();

    assertEquals(mimeType, "image/png");

    }

    我们还可以使用URLConnection.getContentType()方法来获取Mine Type。这个方法依赖于内部的FileNameMap类,通过文件扩展名来匹配MineType。同时也可以调用guessContentTypeFromStream()方法传入一个输入流,通过文件的前几个字符判断文件的MineType。

    @Test

    public void whenUsingGuessContentTypeFromName_thenSuccess(){

    File file = new File("product.png");

    String mimeType = URLConnection.guessContentTypeFromName(file.getName());

    assertEquals(mimeType, "image/png");

    }

    一个相对较快的方式是使用URLConnection.getFileNameMap()。这个方法先通过URLConnection获取其内置的所有Mine Type列表,之后通过文件名取得对应值。URLConnection内置的类型是有限,默认加载路径为JRE_HOME/lib/content-types.properties,可以设置content.types.user.table属性自定义拓展改该列表。

    @Test

    public void whenUsingGetFileNameMap_thenSuccess(){

    File file = new File("product.png");

    FileNameMap fileNameMap = URLConnection.getFileNameMap();

    String mimeType = fileNameMap.getContentTypeFor(file.getName());

    assertEquals(mimeType, "image/png");

    }

    System.setProperty("content.types.user.table","");

    第二点中的方法和第三点本质上是相同的,通过查看URLConnection.guessContentTypeFromName源码可知。

    public static String guessContentTypeFromName(String fname) {

    return getFileNameMap().getContentTypeFor(fname);

    }

    方法三

    MimeTypesFileTypeMap通过文件后缀获取Mie Type,这里的参数可以是文件名也可以是File对象。

    @Test

    public void whenUsingMimeTypesFileTypeMap_thenSuccess() {

    File file = new File("product.png");

    MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap();

    String mimeType = fileTypeMap.getContentType(file.getName());

    assertEquals(mimeType, "image/png");

    }

    MimeTypesFileTypeMap通过查找加载mime.types文件来进行类型解析,该类加载文件的顺序如下:

    MimeTypesFileTypeMap 类以编程方式添加的。

    USER.HOME目录下的mime.types文件。

    JAVA.HOME/lib/mime.types。

    工程resources目录下 META-INF/mime.types。

    工程resources目录META-INF/mimetypes.default(通常只有activation.jar 下面有)。

    这里所说的加载顺序应该来自MimeTypesFileTypeMap类的构造方法中定义的,第一点中的以编程方式添加应该是下面的dbv.addElement((Object)null);行,window下反编译出来是null。如果找不到具体加载的哪个文件可以本地debug试试。

    public MimetypesFileTypeMap() {

    Vector dbv = new Vector(5);

    MimeTypeFile mf = null;

    dbv.addElement((Object)null);

    LogSupport.log("MimetypesFileTypeMap: load HOME");

    String system_mimetypes;

    try {

    system_mimetypes = System.getProperty("user.home");

    if (system_mimetypes != null) {

    String path = system_mimetypes + File.separator + ".mime.types";

    mf = this.loadFile(path);

    if (mf != null) {

    dbv.addElement(mf);

    }

    }

    } catch (SecurityException var6) {

    }

    LogSupport.log("MimetypesFileTypeMap: load SYS");

    try {

    system_mimetypes = System.getProperty("java.home") + File.separator + "lib" + File.separator + "mime.types";

    mf = this.loadFile(system_mimetypes);

    if (mf != null) {

    dbv.addElement(mf);

    }

    } catch (SecurityException var5) {

    }

    LogSupport.log("MimetypesFileTypeMap: load JAR");

    this.loadAllResources(dbv, "META-INF/mime.types");

    LogSupport.log("MimetypesFileTypeMap: load DEF");

    mf = this.loadResource("/META-INF/mimetypes.default");

    if (mf != null) {

    dbv.addElement(mf);

    }

    this.DB = new MimeTypeFile[dbv.size()];

    dbv.copyInto(this.DB);

    }

    mime.types定义样例如下:

    type=application/octet-stream exts=bin

    其他样例参考

    方法四

    jMimeMagic是一个限制性许的库,可以通过该库去获取Mine type。maven 依赖配置如下(版本可依据当前最新配置):

    net.sf.jmimemagicgroupId>

    jmimemagicartifactId>

    0.1.5version>

    dependency>

    使用代码如下:

    @Test

    public void whenUsingJmimeMagic_thenSuccess() {

    File file = new File("product.png");

    Magic magic = new Magic();

    MagicMatch match = magic.getMagicMatch(file, false);

    assertEquals(match.getMimeType(), "image/png");

    }

    该函数可以使用流数据,因此文件可以不存在。

    这说的应该是getMagicMatch方法的重载函数,可以直接使用bye[],如果使用File作为参数文件是必须存在的。

    方法五

    Apache Tika是一个工具集,可检测并从各种文件中提取元数据和文本。

    它具有丰富而强大的API,并带有tika-core,我们可以利用它来检测fi的MIME类型。

    maven依赖配置如下:

    org.apache.tikagroupId>

    tika-coreartifactId>

    1.18version>

    dependency>

    java示例代码如下

    @Test

    public void whenUsingTika_thenSuccess() {

    File file = new File("product.png");

    Tika tika = new Tika();

    String mimeType = tika.detect(file);

    assertEquals(mimeType, "image/png");

    }

    The library relies on magic markers in the stream prefix, for type resolution.(这句没懂,大概意思应该是通过文件前面几个字符判断Mine Type)。

    总结

    在这篇文章中我们使用了好几种方式获取文件的Mine Type,除此之外我们也分析了几种方法。文章中使用的完整代码gitHub链接

    展开全文
  • Android MIME TYPE的基本用法

    千次阅读 2021-11-30 16:34:18
    MIME_TYPE external/mime-support/mime.types frameworks/base/mime/java-res/android.mime.types MIME类型 MIME type的缩写为(Multipurpose Internet Mail Extensions)代表互联网媒体类型(Internet media type),...

    MIME_TYPE

    external/mime-support/mime.types
    frameworks/base/mime/java-res/android.mime.types

    1. MIME类型

    MIME type的缩写为(Multipurpose Internet Mail Extensions)代表互联网媒体类型(Internet media type),MIME使用一个简单的字符串

    组成,最初是为了标识邮件Email附件的类型,在html文件中可以使用content-type属性表示,描述了文件类型的互联网标准。

    MIME类型能包含视频、图像、文本、音频、应用程序等数据。Android开发中也会常常涉及到这已概念。

    一、intent过滤器中的MIME Type

    对于隐式意图,Android通过定义活动的Intent Filter(意图过滤器)来匹配隐式Intent对象,当一个intent对象被一个Intent Filter进行

    匹配测试时,有三个方面会被参考到:动作、data (URI以及数据类型)和类别。其中的data就和MIME Type有关。

    二、Provider 中的MIME Type

    Content providers能以字符串的形式返回标准的MIME Type或者自定义的MIME Type。 在自定义的ContentProvider类中,一般会重写getType()方法,用于返回一个与URI对应的MIMEType

    MIME media types and the extensions that represent them.
    external/mime-support/mime.types

    frameworks/base/mime/java-res/android.mime.types

    packages/apps/Bluetooth/Androidmanifest.xml

    <activity android:name=".opp.BluetoothOppLauncherActivity"
        android:process="@string/process"
        android:theme="@android:style/Theme.Material.Light.Dialog"
        android:label="@string/bt_share_picker_label"
        android:enabled="@bool/profile_supported_opp">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
            <data android:mimeType="video/*" />
            <data android:mimeType="audio/*" />
            <data android:mimeType="text/x-vcard" />
            <data android:mimeType="text/x-vcalendar" />
            <data android:mimeType="text/calendar" />
            <data android:mimeType="text/plain" />
            <data android:mimeType="text/html" />
            <data android:mimeType="text/xml" />
            <data android:mimeType="application/zip" />
            <data android:mimeType="application/vnd.ms-excel" />
            <data android:mimeType="application/msword" />
            <data android:mimeType="application/vnd.ms-powerpoint" />
            <data android:mimeType="application/pdf" />
            <data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
            <data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
            <data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" />
            <data android:mimeType="application/x-hwp" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
            <data android:mimeType="video/*" />
            <data android:mimeType="x-mixmedia/*" />
            <data android:mimeType="text/x-vcard" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.btopp.intent.action.OPEN" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="vnd.android.cursor.item/vnd.android.btopp" />
        </intent-filter>
    </activity>
    

    一个MIME Type由媒体类型(type)与子类型(subtype)组成,它们之间使用反斜杠/分割,形式如下:type/subtype

    如果我们要让一个activity能打开图片这种类型的文件,那么我们可以这样定义activity的intent-filter:

    在manifest文件里->activity 添加

    <intent-filter>
        <actionandroid:name="android.intent.action.VIEW" />
        <categoryandroid:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/jpeg ">
    </intent-filter>
    

    这样就把当前程序注册为可以打开/查看jpeg类型的图片

    当在文件管理器里点击任何jpeg文件, 系统都会试图去执行你的程序。

    " image/jpeg "这一类型属于标准的MIME Type。

    展开全文
  • 认识安卓中的MIME Type

    2021-05-27 01:37:57
    MIME type的缩写为(Multipurpose Internet Mail Extensions)代表互联网媒体类型(Internet media type),MIME使用一个简单的字符串组成,最初是为了标识邮件Email附件的类型,在html文件中可以使用content-type属性...
  • mimetype-过滤器 笔记 这个插件已经合并到了 Nutch 项目的主干中。 从 1.10 版开始,此插件将与 Nutch 发行版捆绑在一起 Nutch 1.x 插件,允许通过抓取网页的 MIME 类型属性过滤索引文档。 基本上,这将允许您限制将...
  • MIME TYPE

    2018-07-18 16:30:00
    MIME TYPE CreationTime--2018年7月18日16点27分 Author:Marydon Tomcat/conf/web.xml中有 用于设置响应类型 展示 <!-- ===================== Default MIME Type Mappings =================== --> ...
  • MIMEType

    2020-03-24 23:18:21
    一、说明 MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准,说白了也就是...二、部分文件的MIMEType 文件拓展名 MIMEType png image/png bmp\dib image/bmp jpg\jpe...
  • MimeType文件校验demo

    2015-08-20 11:30:01
    代码演示了几种获取MimeType类型的方法,包括jar包
  • 常用文件的MIMEType 如何通过一次请求获取文件的MIMEType 二 常用文件的MIMEType 2.1 图片 类型 文件拓展名 MIMEType 图片 png image/png 图片 bmp\dib image/bmp 图片 jpe\jpeg\jpg image/jpeg ...
  • 一、MIME Type是什么? 资源的媒体类型 MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序打开的方式类型,当该扩展名文件被访问时,浏览器会自动...
  • 【Django】MIME type (‘text/html‘) is not a supported stylesheet MIME type
  • mime2ext 一个简单的板条箱,用于查找MIME类型的文件扩展名。 它嵌入了数据库的一部分,有效地打包到大约20 KiB中。... ( mime2ext ( "nonexistent/mimetype" ), None ); assert_eq! ( mime2ext (
  • 解析哑剧一个集中解析模块,可以扩展以处理任何 mime 类型安装使用 : packin add jkroso/parse-mime 然后在您的应用中: var parse = require ( 'parse-mime' )应用程序接口parse(mime, data) 接受一个 mimetype ...
  • #MimeType 改进了对 finfo 的 mime_type 检测,而不依赖于任何系统实用程序(例如 Linux file 命令)。 使用 Apache 存储库中 mime 类型的本地缓存副本: ##安装 ###使用作曲家 编辑 composer.json 并添加: ...
  • 地图Scala 文件名到 mimetype 映射库
  • ALLOW_METHODS = ( 'DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'VIEW', ) CORS_ALLOW_HEADERS = ( 'XMLHttpRequest', 'X_FILENAME', 'accept-encoding', 'authorization', 'content-type', 'dnt', '...
  • MimeMagic-Android MimeMagic-Android是用于Android的开源MimeType检测器库,可通过File,ByteArray,InputStream,Uri和Name提取MimeType,如果提取失败,则使用后备方法获取前缀和后缀,从而轻松检查MimeType是否...
  • laravel-mime-type Laravel验证中受支持的MIME类型 protected $defaultExtensions = array( 'application/andrew-inset' => 'ez', 'application/applixware' => 'aw', 'application/atom+xml' => 'atom', '...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 243,500
精华内容 97,400
关键字:

MIME type