加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

根据文件取得Mime Type的各种技巧

发布时间:2021-11-19 17:08:53 所属栏目:教程 来源:互联网
导读:1、mime-util: 该工具可以通过 检测文件扩展名,或者检测magic header 两种技术方式来实现mime类型的检测。 比较可靠,而且轻量级、只依赖于slf4j一个包 。2010年后就没有更新了。 POM dependency groupIdeu.medsea.mimeutil/groupId artifactIdmime-util/ar

1、mime-util:
 
该工具可以通过 检测文件扩展名,或者检测magic header 两种技术方式来实现mime类型的检测。
 
比较可靠,而且轻量级、只依赖于slf4j一个包  。2010年后就没有更新了。
 
POM
 
<dependency>
    <groupId>eu.medsea.mimeutil</groupId>
    <artifactId>mime-util</artifactId>
    <version>2.1.3</version>
</dependency>
 
示例代码:
 
import eu.medsea.mimeutil.MimeUtil;
public class Main {
    public static void main(String[] args) {
        MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
        File f = new File ("c:/temp/mime/test.doc");
        Collection<?> mimeTypes = MimeUtil.getMimeTypes(f);
        System.out.println(mimeTypes);
        //  output : application/msword
    }
}
 
2、JMimeMagic
 
通过检测文件后缀名去查找文件类型显然不是一个健壮的方法。
 
JMimeMagic是一个通过检查magic headers来判断文件或者流的mime 类型的Java工具包 。
 
目前还在持续更新当中、推荐使用。
 
POM
 
<dependency>
    <groupId>net.sf.jmimemagic</groupId>
    <artifactId>jmimemagic</artifactId>
    <version>0.1.4</version>
</dependency>
 
示例代码
 
Magic parser = new Magic() ;
// getMagicMatch accepts Files or byte[],
// which is nice if you want to test streams
MagicMatch match = parser.getMagicMatch(new File("gumby.gif"));
System.out.println(match.getMimeType()) ;
 
3、java.net.URL
与上面所说的匹配后缀名类似。后缀名和mime-type的映射关系被定义在[jre_home]libcontent-types.properties
该组件只根据文件扩展名判断mime-type。不是很可靠。
 
示例代码(推荐)
 
import java.net.FileNameMap;
import java.net.URLConnection;
 
public class FileUtils {
 
  public static String getMimeType(String fileUrl)
      throws java.io.IOException
    {
      FileNameMap fileNameMap = URLConnection.getFileNameMap();
      String type = fileNameMap.getContentTypeFor(fileUrl);
 
      return type;
    }
 
    public static void main(String args[]) throws Exception {
      System.out.println(FileUtils.getMimeType("file://c:/temp/test.TXT"));
      // output :  text/plain
    }
  }
 
示例代码(不推荐:这种方式也是通过扩展名判断mime type的、而且速度很慢)
 
import java.net.*;
 
public class FileUtils{
  public static String getMimeType(String fileUrl)
    throws java.io.IOException, MalformedURLException
  {
    String type = null;
    URL u = new URL(fileUrl);
    URLConnection uc = null;
    uc = u.openConnection();
    type = uc.getContentType();
    return type;
  }
 
  public static void main(String args[]) throws Exception {
    System.out.println(FileUtils.getMimeType("file://c:/temp/test.TXT"));
    // output :  text/plain
  }
}
 
4、javax.activation.MimetypesFileTypeMap
需要引入activation.jar这个jar包 , 他可以从下面这个网站获得http://java.sun.com/products/javabeans/glasgow/jaf.html.
这个MimetypesFileMap类会映射出一个file的Mime Type,这些Mime Type类型是在activation.jar包里面的资源文件中定义的
自带的mime-type列表中的数量有限,但是它提供了方法让您可以很方便的添加更多的mime类型
 
MimetypesFileTypeMap 会在用户系统的很多地方去查找文件的MIME类型。当一个查找MIME类型的请求到达后,他会按照下面这个顺序去查找MIME类型
 
首先通过程序将文件添加到MimetypesFileTypeMap的一个实例中
查找用户的home路径下的文件 .mime.types
查找文件  <java.home>/lib/mime.types
查找文件或者资源 META-INF/mime.types
查找文件或者资源 META-INF/mimetypes.default (一般只在 activation.jar 中去查找).
 
当你需要处理一个传入的一般文件命名的文件的时候,这个方法是非常有趣的。结果出来的速度很快,因为只有扩展名被用来猜测文件的自然属性
 
示例代码
 
import javax.activation.MimetypesFileTypeMap;
import java.io.File;
 
class GetMimeType {
  public static void main(String args[]) {
    File f = new File("gumby.gif");
    System.out.println("Mime Type of " + f.getName() + " is " +
                        new MimetypesFileTypeMap().getContentType(f));
    // expected output :
    // "Mime Type of gumby.gif is image/gif"
  }

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读