2010-12-03 15 views
12

मैं जावा पुस्तकालय की खोज कर रहा हूं जो आपको फ़ाइल सामग्री (बाइट सरणी) देखकर माइम प्रकार बताता है। मुझे jmimemagic का उपयोग करके यह प्रोजेक्ट मिला और यह अब नए फ़ाइल प्रकारों का समर्थन नहीं करता है (उदाहरण के लिए एमएस वर्ड डॉक्स प्रारूप) क्योंकि यह अब निष्क्रिय है (2006 से)।जावा लाइब्रेरी फ़ाइल सामग्री से माइम प्रकार खोजने के लिए

+3

http://sourceforge.net/projects/mime-util/files/mime-util/mime-util-2.1.3/ – khachik

+1

मुझे यह संदर्भित प्रश्न के लिए एक डुप्लिकेट नहीं लगता है क्योंकि लेखक स्पष्ट रूप से पूछता है फ़ाइल सामग्री द्वारा पता लगाने जबकि अन्य प्रश्न के समाधान एक फ़ाइल (समावेशी फ़ाइल नाम) का संदर्भ लें। – danielp

+0

समाधान [यहां] के बारे में क्या है (http://www.rgagnon.com/javadetails/java-0487.html)। क्या वे आपके लिए काम नहीं करते हैं? – javamonkey79

उत्तर

5

सामग्री पहचान के लिए अपाचे टिक का उपयोग करें। कृपया नीचे दिए गए लिंक को ढूंढें। http://tika.apache.org/0.8/detection.html। हम इतने सारे जार निर्भरता है जो आप जब आप Maven

 ByteArrayInputStream bai = new ByteArrayInputStream(pByte); 
     ContentHandler contenthandler = new BodyContentHandler(); 
     Metadata metadata = new Metadata(); 
     Parser parser = new AutoDetectParser(); 
     try { 
       parser.parse(bai, contenthandler, metadata); 

     } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
     } catch (SAXException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
     } catch (TikaException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
     }   
     System.out.println("Mime: " + metadata.get(Metadata.CONTENT_TYPE)); 
     return metadata.get(Metadata.CONTENT_TYPE); 
9

हो सकता है कि किसी के लिए उपयोगी है, जो साथ ही सबसे अधिक इस्तेमाल किया कार्यालय प्रारूपों की जरूरत है (और उपयोग नहीं करता है अपाचे टीका) का उपयोग कर टीका निर्माण पा सकते हैं:

public class MimeTypeUtils { 

    private static final Map<String, String> fileExtensionMap; 

    static { 
     fileExtensionMap = new HashMap<String, String>(); 
     // MS Office 
     fileExtensionMap.put("doc", "application/msword"); 
     fileExtensionMap.put("dot", "application/msword"); 
     fileExtensionMap.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); 
     fileExtensionMap.put("dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"); 
     fileExtensionMap.put("docm", "application/vnd.ms-word.document.macroEnabled.12"); 
     fileExtensionMap.put("dotm", "application/vnd.ms-word.template.macroEnabled.12"); 
     fileExtensionMap.put("xls", "application/vnd.ms-excel"); 
     fileExtensionMap.put("xlt", "application/vnd.ms-excel"); 
     fileExtensionMap.put("xla", "application/vnd.ms-excel"); 
     fileExtensionMap.put("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
     fileExtensionMap.put("xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template"); 
     fileExtensionMap.put("xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12"); 
     fileExtensionMap.put("xltm", "application/vnd.ms-excel.template.macroEnabled.12"); 
     fileExtensionMap.put("xlam", "application/vnd.ms-excel.addin.macroEnabled.12"); 
     fileExtensionMap.put("xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12"); 
     fileExtensionMap.put("ppt", "application/vnd.ms-powerpoint"); 
     fileExtensionMap.put("pot", "application/vnd.ms-powerpoint"); 
     fileExtensionMap.put("pps", "application/vnd.ms-powerpoint"); 
     fileExtensionMap.put("ppa", "application/vnd.ms-powerpoint"); 
     fileExtensionMap.put("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"); 
     fileExtensionMap.put("potx", "application/vnd.openxmlformats-officedocument.presentationml.template"); 
     fileExtensionMap.put("ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow"); 
     fileExtensionMap.put("ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12"); 
     fileExtensionMap.put("pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12"); 
     fileExtensionMap.put("potm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12"); 
     fileExtensionMap.put("ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"); 
     // Open Office 
     fileExtensionMap.put("odt", "application/vnd.oasis.opendocument.text"); 
     fileExtensionMap.put("ott", "application/vnd.oasis.opendocument.text-template"); 
     fileExtensionMap.put("oth", "application/vnd.oasis.opendocument.text-web"); 
     fileExtensionMap.put("odm", "application/vnd.oasis.opendocument.text-master"); 
     fileExtensionMap.put("odg", "application/vnd.oasis.opendocument.graphics"); 
     fileExtensionMap.put("otg", "application/vnd.oasis.opendocument.graphics-template"); 
     fileExtensionMap.put("odp", "application/vnd.oasis.opendocument.presentation"); 
     fileExtensionMap.put("otp", "application/vnd.oasis.opendocument.presentation-template"); 
     fileExtensionMap.put("ods", "application/vnd.oasis.opendocument.spreadsheet"); 
     fileExtensionMap.put("ots", "application/vnd.oasis.opendocument.spreadsheet-template"); 
     fileExtensionMap.put("odc", "application/vnd.oasis.opendocument.chart"); 
     fileExtensionMap.put("odf", "application/vnd.oasis.opendocument.formula"); 
     fileExtensionMap.put("odb", "application/vnd.oasis.opendocument.database"); 
     fileExtensionMap.put("odi", "application/vnd.oasis.opendocument.image"); 
     fileExtensionMap.put("oxt", "application/vnd.openofficeorg.extension"); 
    } 

    public static String getContentTypeByFileName(String fileName) { 
     // 1. first use java's buildin utils 
     FileNameMap mimeTypes = URLConnection.getFileNameMap(); 
     String contentType = mimeTypes.getContentTypeFor(fileName); 
     // 2. nothing found -> lookup our in extension map to find types like ".doc" or ".docx" 
     if (!StringUtils.hasText(contentType)) { 
      String extension = FilenameUtils.getExtension(fileName); 
      contentType = fileExtensionMap.get(extension); 
     } 
     return contentType; 
    } 
} 
+0

आपको पता नहीं है कि मैं इस बारे में कितना समय ढूंढ रहा हूं। आपका बहुत बहुत धन्यवाद! – Mike

+0

इसने मुझे नए एमएस ऑफिस एक्सटेंशन को सही ढंग से पहचानने के लिए मेरे अनुप्रयोगों में से किसी एक को अपडेट करने के लिए एक अनोखा समय बचाया! धन्यवाद! – Saggio

+0

मुझे 'if (! StringUtils.hasText (contentType)) {'to' if (StringUtils.isBlank (contentType)) {'बदलना था। कोडेज़ के लिए धन्यवाद! –

2

मैं javax.activation.MimetypesFileTypeMap का उपयोग करता हूं। यह एक छोटे से सेट से शुरू होता है: $JRE_HOME/lib/content-types.properties, लेकिन आप स्वयं को जोड़ सकते हैं। MimetypesFileTypeMap के जावाडोक में दिखाए गए प्रारूप में mime.types फ़ाइल बनाएं (मैंने नेट से बड़ी सूची के साथ शुरुआत की, इसे मालिश किया, और जोड़े गए जोड़े गए प्रकार)। अब आप अपने mime.types फ़ाइल को खोलकर अपने कोड में जोड़ सकते हैं और अपनी सामग्री को अपने मानचित्र में जोड़ सकते हैं। हालांकि आसान समाधान आपके mime.types फ़ाइल को अपने जार के META-INF में जोड़ना है। java.activation इसे स्वचालित रूप से उठाएगा।

संबंधित मुद्दे