java जावा में एमआईएमई प्रकार से उचित फ़ाइल एक्सटेंशन कैसे निर्धारित करें



amazon-s3 apache-tika (1)

जैसा कि कुछ टिप्पणीकारों ने इंगित किया है, माइमटाइप और फ़ाइल एक्सटेंशन के बीच कोई सार्वभौमिक 1: 1 मैपिंग नहीं है ... कुछ mimetypes में एक से अधिक संभावित एक्सटेंशन हैं, कई एक्सटेंशन कई mimetypes द्वारा साझा किए जाते हैं, और कुछ mimetypes कोई विस्तार नहीं है।

जहां भी संभव हो, आप mimetype को संग्रहीत करने और आगे बढ़ने और विस्तार के बारे में भूलने से बेहतर हैं।

उस ने कहा, यदि आप किसी दिए गए mimetype के लिए सबसे आम फ़ाइल एक्सटेंशन प्राप्त करना चाहते हैं, तो Tika जाने का एक अच्छा तरीका है। अपाचे टिका के पास माइमीटाइप का एक बहुत बड़ा सेट है जो इसके बारे में जानता है, और इनमें से कई के लिए यह पहचान, सामान्य एक्सटेंशन, विवरण इत्यादि के लिए माइम जादू भी जानता है।

यदि आप एक जेपीईजी फ़ाइल के लिए सबसे आम एक्सटेंशन प्राप्त करना चाहते हैं, तो इस अपाचे टीका इकाई परीक्षण में दिखाए गए अनुसार आपको कुछ ऐसा करने की आवश्यकता है:

  MimeTypes allTypes = MimeTypes.getDefaultMimeTypes();
  MimeType jpeg = allTypes.forName("image/jpeg");
  String jpegExt = jpeg.getExtension(); // .jpg
  assertEquals(".jpg", jpeg.getExtension());

मुख्य बात यह है कि आपको सभी mimetypes की परिभाषा प्राप्त करने के लिए Tika जार में बंडल की गई XML फ़ाइल को लोड करने की आवश्यकता है। यदि आप कस्टम mimetypes के साथ भी काम कर रहे हैं, तो Tika उन का समर्थन करता है, और लाइन एक को बदलने के लिए:

  TikaConfig config = TikaConfig.getDefaultConfig();
  MimeTypes allTypes = config.getMimeRepository();

MimeTypes प्राप्त करने के लिए TikaConfig विधि का उपयोग करके, Tika कस्टम mimetype defintions के लिए भी अपने क्लासपाथ की जांच करेगा, और उनको भी शामिल करें।

मैं एक अमेज़ॅन एस 3 बाल्टी में फाइल अपलोड कर रहा हूं और इनपुटस्ट्रीम और एक स्ट्रिंग तक पहुंच है जिसमें फाइल के एमआईएमई प्रकार हैं लेकिन मूल फ़ाइल नाम नहीं है। S3 पर फ़ाइल को धक्का देने से पहले वास्तव में फ़ाइल नाम और एक्सटेंशन बनाने के लिए मेरे ऊपर निर्भर है। क्या एमआईएमई प्रकार से उपयोग करने के लिए उपयुक्त एक्सटेंशन निर्धारित करने के लिए कोई पुस्तकालय या सुविधाजनक तरीका है?

मैंने अपाचे टिका लाइब्रेरी के कुछ संदर्भ देखे हैं, लेकिन यह ओवरकिल जैसा लगता है और मैं इसे अभी तक फ़ाइल एक्सटेंशन का सफलतापूर्वक पता लगाने में सक्षम नहीं हूं। जो मैं इसे इकट्ठा करने में सक्षम हूं, ऐसा लगता है कि इस कोड को काम करना चाहिए, लेकिन जब मैं अपना टाइप वैरिएबल "छवि / जेपीईजी" करता हूं तो मुझे बस एक खाली स्ट्रिंग मिल रही है

    MimeType mimeType = null;
    try {
        mimeType = new MimeTypes().forName(type);
    } catch (MimeTypeException e) {
        Logger.error("Couldn't Detect Mime Type for type: " + type, e);
    }

    if (mimeType != null) {
        String extension = mimeType.getExtension();
        //do something with the extension
    }




apache-tika