दिलचस्प पोस्ट
स्विफ्ट में NSURLSessionDataTask का उपयोग कैसे करें साइन लहर जो धीरे-धीरे आवृत्ति को एक निश्चित समय के लिए एफ 1 से एफ 2 तक बढ़ाती है सी में नेस्टेड फ़ंक्शन एंड्रॉइड स्टूडियो में केस बटन पाठ को कम नहीं कर सकते सी # में एक जेसन फाइल पढ़ें और पार्स करें मैं कैसे जाँच सकता हूँ अगर एक स्ट्रिंग सी # में एक अक्षर है? पायथन में कोई ट्यूपल समझ क्यों नहीं है? अधिकतम निवेदन लंबाई से अधिक। विंडोज के तहत आईओएस डेवलपमेंट के लिए विकल्प सी ++ वैलेरेरे बनाम वेक्टर मॉड्यूल को गतिशील रूप से इंजेक्ट करें, यदि आवश्यक हो तो जावा में स्ट्रिंग को कैसे परिवर्तित करना है? निर्धारित करें कि तालिका दृश्य सेल दृश्यमान है या नहीं कुकीज़ कैसे काम करती है? जावा में चर परिभाषा के लिए इंटरफ़ेस या प्रकार का उपयोग करें?

जावा में एक फ़ाइल का माइम प्रकार प्राप्त करना

मैं बस सोच रहा था कि ज्यादातर लोग जावा में एक फ़ाइल से माइम प्रकार क्यों लाते हैं? अब तक मैंने दो utils की कोशिश की है: JMimeMagic और Mime-Util JMimeMagic

पहली बार मुझे मेमोरी अपवाद दिया गया था, दूसरे ने अपनी धाराओं को ठीक से बंद नहीं किया। मैं तो बस सोच रहा था कि किसी और के पास कोई विधि / पुस्तकालय था जो उन्होंने इस्तेमाल किया और सही तरीके से काम किया?

Solutions Collecting From Web of "जावा में एक फ़ाइल का माइम प्रकार प्राप्त करना"

जावा 7 में अब आप सिर्फ Files.probeContentType(path)Files.probeContentType(path) उपयोग कर सकते हैं।

दुर्भाग्य से,

 mimeType = file.toURL().openConnection().getContentType(); 

काम नहीं कर रहा है, क्योंकि यूआरएल के उपयोग से फाइल लॉक हो जाती है, इसलिए, उदाहरण के लिए, यह undeletable है

हालांकि, आपके पास यह है:

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

और निम्नलिखित, जो फ़ाइल एक्सटेंशन के केवल उपयोग से परे जाने का फायदा है, और सामग्री पर एक झांकना लेता है

 InputStream is = new BufferedInputStream(new FileInputStream(file)); mimeType = URLConnection.guessContentTypeFromStream(is); //...close stream 

हालांकि, ऊपर की टिप्पणी के सुझाव के अनुसार, माइम-प्रकार की अंतर्निहित तालिका काफी सीमित है, इसमें शामिल नहीं है, उदाहरण के लिए, MSWord और PDF इसलिए, यदि आप सामान्य बनाना चाहते हैं, तो आपको अंतर्निहित लाइब्रेरी से परे जाने की आवश्यकता होगी, जैसे, माइम-यूटिल (जो एक महान पुस्तकालय है, दोनों फ़ाइल एक्सटेंशन और सामग्री का उपयोग कर)।

javax.activation एपीआई javax.activation 6 का हिस्सा है। javax.activation पैकेज को देखें।

सबसे दिलचस्प वर्ग javax.activation.MimeType – एक वास्तविक एमआईएम प्रकार धारक – और javax.activation.MimetypesFileTypeMap – वर्ग जिसका उदाहरण MIME प्रकार को फ़ाइल के लिए स्ट्रिंग के रूप में हल कर सकता है:

 String fileName = "/path/to/file"; MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap(); // only by file name String mimeType = mimeTypesMap.getContentType(fileName); // or by actual File instance File file = new File(fileName); mimeType = mimeTypesMap.getContentType(file); 

यदि आप एक एंड्रॉइड डेवलपर हैं, तो आप एक उपयोगिता वर्ग android.webkit.MimeTypeMap उपयोग कर सकते हैं जो एक्सटेंशन के लिए फ़ाइल एक्सटेंशन और इसके विपरीत माइम-प्रकार के मानचित्र को दर्शाता है।

निम्नलिखित कोड स्निपेट आपकी सहायता कर सकते हैं

 private static String getMimeType(String fileUrl) { String extension = MimeTypeMap.getFileExtensionFromUrl(fileUrl); return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); } 

गुलाबसेनिया से :

 FileNameMap fileNameMap = URLConnection.getFileNameMap(); String mimeType = fileNameMap.getContentTypeFor("alert.gif"); 

अपाचे टिकिया स्ट्रीम उपसर्ग में जादू मार्कर्स के आधार पर टिका -कोर में एक माइम प्रकार का पता लगाने की पेशकश करती है। tika-core अन्य निर्भरताओं को नहीं लाता है, जो इसे वर्तमान में अबाधित माइम प्रकार डिटेक्शन यूटिलिटी के रूप में हल्का बना देता है

सरल कोड का उदाहरण (जावा 7), चर का उपयोग करके theInputStream और theFileName

 try (InputStream is = theInputStream; BufferedInputStream bis = new BufferedInputStream(is);) { AutoDetectParser parser = new AutoDetectParser(); Detector detector = parser.getDetector(); Metadata md = new Metadata(); md.add(Metadata.RESOURCE_NAME_KEY, theFileName); MediaType mediaType = detector.detect(bis, md); return mediaType.toString(); } 

कृपया ध्यान दें कि MediaType.detect (…) सीधे उपयोग नहीं किया जा सकता ( TIKA-1120 )। अधिक संकेत https://tika.apache.org/0.10/detection.html पर उपलब्ध कराए जाते हैं।

अपाचे टिका के साथ आपको केवल तीन कोड की आवश्यकता होती है :

 File file = new File("/path/to/file"); Tika tika = new Tika(); System.out.println(tika.detect(file)); 

यदि आपके पास ग्रिनोई कंसोल है, तो इसे पेस्ट करके इसे चलाने के लिए इस कोड को चलाएं:

 @Grab('org.apache.tika:tika-core:1.14') import org.apache.tika.Tika; def tika = new Tika() def file = new File("/path/to/file") println tika.detect(file) 

ध्यान रखें कि इसके API अमीर हैं, यह "कुछ भी" पार्स कर सकता है टिका-कोर 1.14 के अनुसार, आपके पास:

 String detect(byte[] prefix) String detect(byte[] prefix, String name) String detect(File file) String detect(InputStream stream) String detect(InputStream stream, Metadata metadata) String detect(InputStream stream, String name) String detect(Path path) String detect(String name) String detect(URL url) 

अधिक जानकारी के लिए एपीडॉक्स देखें

यदि आप जावा 5-6 से जुड़ा हो, तो इस उपयोगिता वर्ग से सर्विस ओपन सोर्स उत्पाद से

https://github.com/Servoy/servoy-client/blob/e7f5bce3c3dc0f0eb1cd240fce48c75143a25432/servoy_shared/src/com/servoy/j2db/util/MimeTypes.java#L34

आपको केवल इस फ़ंक्शन की ज़रूरत है

 public static String getContentType(byte[] data, String name) 

यह सामग्री के पहले बाइट्स की जांच करता है और उस सामग्री के आधार पर सामग्री प्रकार देता है, न कि फ़ाइल एक्सटेंशन के द्वारा।

मैं बस सोच रहा था कि ज्यादातर लोग जावा में एक फ़ाइल से माइम प्रकार क्यों लाते हैं?

मैंने अपने सरल मैजिक जावा पैकेज को प्रकाशित किया है जो फ़ाइलों और बाइट सरणियों से सामग्री प्रकार (माइम-टाइप) निर्धारण की अनुमति देता है यह यूनिक्स फ़ाइल को पढ़ने और चलाने के लिए डिज़ाइन किया गया है (1) कमांड मैजिक फाइलें जो सबसे अधिक ~ यूनिक्स ओएस कॉन्फ़िगरेशन का हिस्सा हैं।

मैंने अपाचे URLConnection की कोशिश की लेकिन यह कई निर्भरताओं के साथ बहुत बड़ा है , URLConnection फ़ाइलों के बाइट्स का उपयोग नहीं करता है, और MimetypesFileTypeMap भी फाइल नामों पर दिखता है।

सरल मैजिक के साथ आप ऐसा कुछ कर सकते हैं:

 // create a magic utility using the internal magic file ContentInfoUtil util = new ContentInfoUtil(); // if you want to use a different config file(s), you can load them by hand: // ContentInfoUtil util = new ContentInfoUtil("/etc/magic"); ... ContentInfo info = util.findMatch("/tmp/upload.tmp"); // or ContentInfo info = util.findMatch(inputStream); // or ContentInfo info = util.findMatch(contentByteArray); // null if no match if (info != null) { String mimeType = info.getMimeType(); } 

मैंने इसे करने के लिए कई तरीके की कोशिश की, जिसमें पहले लोगों ने कहा था कि जोशुआ फॉक्स @ लेकिन कुछ लोग पीडीएफ फाइलों की तरह अक्सर माइमैप की पहचान नहीं करते हैं, और अन्य नकली फाइलों के साथ भरोसेमंद नहीं हो सकते (मैं विस्तार के साथ एक आरएआर फ़ाइल के साथ टिफ़ में बदल गया)। मैंने पाया समाधान, जैसा कि ज़ोआआ फॉक्स द्वारा एक सतही तरीके से कहा जाता है, इसका उपयोग MimeUtil2 का उपयोग करना है , जैसे:

 MimeUtil2 mimeUtil = new MimeUtil2(); mimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector"); String mimeType = MimeUtil2.getMostSpecificMimeType(mimeUtil.getMimeTypes(file)).toString(); 

फाइल अपलोड के लिए दो परत सत्यापन का उपयोग करना बेहतर है।

पहले आप mimeType के लिए जांच कर सकते हैं और इसे मान्य कर सकते हैं।

दूसरा, आपको अपनी फ़ाइल के पहले 4 बाइट को हेक्साडेसिमल में कनवर्ट करना और उसके बाद जादू संख्याओं की तुलना करना चाहिए। तो यह फ़ाइल सत्यापन की जांच करने के लिए वास्तव में एक सुरक्षित तरीका होगा।

यह ऐसा करने के लिए मैंने पाया सबसे आसान तरीका है:

 byte[] byteArray = ... InputStream is = new BufferedInputStream(new ByteArrayInputStream(byteArray)); String mimeType = URLConnection.guessContentTypeFromStream(is); 

अगर आप लिनक्स ओएस पर काम करते हैं, तो एक कमांड लाइन file --mimetype :

 String mimetype(file){ //1. run cmd Object cmd=Runtime.getRuntime().exec("file --mime-type "+file); //2 get output of cmd , then //3. parse mimetype if(output){return output.split(":")[1].trim(); } return ""; } 

फिर

 mimetype("/home/nyapp.war") // 'application/zip' mimetype("/var/www/ggg/au.mp3") // 'audio/mp3' 

वसंत में multipartfile फ़ाइल;

org.springframework.web.multipart.MultipartFile

file.getContentType();

विभिन्न अन्य पुस्तकालयों की कोशिश करने के बाद मैंने माइम-उपयोग के साथ बसे।

 <groupId>eu.medsea.mimeutil</groupId> <artifactId>mime-util</artifactId> <version>2.1.3</version> </dependency> File file = new File("D:/test.tif"); MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector"); Collection<?> mimeTypes = MimeUtil.getMimeTypes(file); System.out.println(mimeTypes); 

मेरे 5 सेंट के साथ चिप करने के लिए:

टी एल, डी आर

मैं MimetypesFileTypeMap का उपयोग करता हूं और किसी भी माइम को जोड़ता हूं जो वहां नहीं है और मुझे इसे विशेष रूप से mime.types फ़ाइल में ज़रूरत है।

और अब, लंबे समय से पढ़ा:

सबसे पहले, माइम प्रकार की सूची विशाल है , यहां देखें: https://www.iana.org/assignments/media-types/media-types.xhtml

मैं सबसे पहले जेडीके द्वारा प्रदान की जाने वाली मानक सुविधाओं का उपयोग करना चाहता हूं, और अगर यह काम नहीं करता है, तो मैं जाकर कुछ और ढूंढूँगा।

फ़ाइल एक्सटेंशन फ़ाइल प्रकार से निर्धारित करें

1.6 के बाद से, जावा में मिमेटेक्सफ़ाइलटाइप मैप है, जैसा कि ऊपर दिए गए उत्तर में से एक में बताया गया है, और यह माइम प्रकार निर्धारित करने का सबसे आसान तरीका है:

 new MimetypesFileTypeMap().getContentType( fileName ); 

अपनी वेनिला कार्यान्वयन में यह बहुत कुछ नहीं करता है (यानी यह .html के लिए काम करता है लेकिन यह .png के लिए नहीं है)। हालांकि, यह आवश्यक है कि आपको कोई भी सामग्री प्रकार जोड़ना सरल है:

  1. अपने प्रोजेक्ट में मेटा- INF फ़ोल्डर में 'mime.types' नाम की फ़ाइल बनाएं
  2. प्रत्येक माइम प्रकार की जरूरत के लिए एक लाइन जोड़ें और डिफ़ॉल्ट कार्यान्वयन प्रदान नहीं करता है (समय के साथ ही सैकड़ों माइम प्रकार होते हैं और सूची बढ़ती है)

पीएनजी और जेएस फाइलों के लिए उदाहरण प्रविष्टियाँ निम्न होंगे:

 image/png png PNG application/javascript js 

Mime.types फ़ाइल प्रारूप के लिए, यहां अधिक विवरण देखें: https://docs.oracle.com/javase/7/docs/api/javax/activation/MimetypesFileTypeMap.html

फ़ाइल सामग्री से फ़ाइल प्रकार निर्धारित करें

1.7 से, जावा में Java.nio.file.spi.FileTypeDetector है , जो कार्यान्वयन में एक विशिष्ट प्रकार के फ़ाइल प्रकार को निर्धारित करने के लिए मानक एपीआई को परिभाषित करता है।

किसी फ़ाइल के लिए माइम प्रकार लाने के लिए, आप केवल फाइलों का उपयोग करेंगे और अपने कोड में ऐसा करेंगे:

 Files.probeContentType(Paths.get("either file name or full path goes here")); 

एपीआई परिभाषा ऐसी सुविधाएं प्रदान करती है जो फ़ाइल नाम या फ़ाइल सामग्री (मैजिक बाइट्स) से फ़ाइल माइम प्रकार को निर्धारित करने के लिए समर्थन करती हैं। यही कारण है कि probeContentType () विधि IOException फेंकता है, अगर इस एपीआई का कार्यान्वयन वास्तव में इसके साथ फाइल को खोलने का प्रयास करने के लिए प्रदत्त पथ का उपयोग करता है

फिर, इस का वेनिला कार्यान्वयन (जो कि जेडीके के साथ आता है) वांछित होने के लिए बहुत कुछ छोड़ देता है

आकाशगंगा में कुछ आदर्श दुनिया में, बहुत दूर, इन सभी लाइब्रेरी जो इस फ़ाइल-टू-माइम-टाइप समस्या को हल करने का प्रयास करते हैं, वह सिर्फ java.nio.file.spi.FileTypeDetector को कार्यान्वित करेगा, आप पसंदीदा कार्यान्वयन पुस्तकालय के जार में छोड़ देंगे अपनी कक्षा में दर्ज करें और वह होगा

वास्तविक दुनिया में, जहां आपको टीएल, डीआर अनुभाग की आवश्यकता होती है, आपको पुस्तकालय को इसके नाम के बगल में सबसे अधिक सितारों के साथ मिलना चाहिए और उसका इस्तेमाल करना चाहिए। इस विशेष मामले के लिए, मुझे एक की ज़रूरत नहीं है (फिर भी;))

 public String getFileContentType(String fileName) { String fileType = "Undetermined"; final File file = new File(fileName); try { fileType = Files.probeContentType(file.toPath()); } catch (IOException ioException) { System.out.println( "ERROR: Unable to determine file type for " + fileName + " due to exception " + ioException); } return fileType; }