4

使用環境は Google App Engine です。zip ファイルが BlobStore にアップロードされました。

次のコードがあります。

ZipInputStream zis = ...
ZipEntry ze = zis.getNextEntry();
while( ze != null){
    System.out.println(ze.getName());
    ze = zis.getNextEntry();
}

zip アーカイブ内の各ファイルのコンテンツ タイプを特定するにはどうすればよいですか? ze.getNameメソッドは、ファイルの名前を表示します。ファイルの種類はどうですか?

ありがとう

4

1 に答える 1

10

mime type場合によっては欠落している可能性があるファイル拡張子で推測しようとする代わりに、 を使用できます。mime typeファイルのを確立するためのオプションは次のとおりです。

  1. を使用してjavax.activation.MimetypesFileTypeMap、次のようにします。

    System.out.println("Mime Type of " + f.getName() + " is " +
        new MimetypesFileTypeMap().getContentType(f));
    
  2. 使用するjava.net.URL

    URL u = new URL(fileUrl);
    URLConnection uc = u.openConnection();
    type = uc.getContentType();
    
  3. 使用するApache Tika

    ContentHandler contenthandler = new BodyContentHandler();
    Metadata metadata = new Metadata();
    metadata.set(Metadata.RESOURCE_NAME_KEY, f.getName());
    Parser parser = new AutoDetectParser();
    // OOXMLParser parser = new OOXMLParser();
    parser.parse(is, contenthandler, metadata);
    System.out.println("Mime: " + metadata.get(Metadata.CONTENT_TYPE));
    System.out.println("Title: " + metadata.get(Metadata.TITLE));
    System.out.println("Author: " + metadata.get(Metadata.AUTHOR));
    System.out.println("content: " + contenthandler.toString());
    
  4. 使用するJMimeMagic

    MagicMatch match = parser.getMagicMatch(f);
    System.out.println(match.getMimeType()) ;
    
  5. 使用するmime-util

    Collection<?> mimeTypes = MimeUtil.getMimeTypes(f);
    
  6. ドロイドの使用

    Droid (Digital Record Object Identification) is a software tool to 
    perform automated batch identification of file formats.
    
  7. アパーチャフレームワーク

    Aperture is an open source library and framework for crawling and indexing
    information sources such as file systems, websites and mail boxes.
    

上記の各オプションの詳細については、ファイルから MIME タイプを取得するを参照してください。

この場合、次の javax.activation.MimetypesFileTypeMapような最初のソリューションを使用するのが最も簡単な方法です。

MimetypesFileTypeMap mtft = new MimetypesFileTypeMap();
String mimeType = mtft.getContentType(ze.getName());
System.out.println(ze.getName()+" type: "+ mimeType);
于 2012-11-09T07:27:48.960 に答える