2014-10-01 4 views
10

जावास्क्रिप्ट (विंडोज 8.1, फ़ायरफ़ॉक्स) में .tar फ़ाइलों या .rar फ़ाइलों (और शायद अन्य) के लिए माइम प्रकार नहीं दिखते हैं, ये केवल दो ही पाए गए हैं) । उसके साथ क्या है? क्या इसका हल करने के लिए मैं कुछ भी उपयोग कर सकता हूं? मैं वास्तव में कुछ अजीब विस्तार हैकिंग किए बिना इन फ़ाइल प्रकारों के लिए माइम प्रकारों को पुनः प्राप्त करने में सक्षम होना चाहता हूं। http://jsfiddle.net/kungfujoe/jd8h7wvs/माइर प्रकार .rar और .tar

आप एक .txt, या एक .docx, या बहुत से अन्य स्वरूपों के लिए ब्राउज़ करें, तो प्रकार सफलतापूर्वक खींच लिया जाता है:

मैं इस मुद्दे को साबित करने का बेला बना दिया। हालांकि, दोनों .tar और .ar उन्हें खींच नहीं है। अजीब, है ना?

(नीचे JSFiddle कोड)

एचटीएमएल

<input id='button' type='file' name='file'/> 
<div id='out'>Output Goes Here</div> 

जावास्क्रिप्ट (JQuery 2.1.0 का उपयोग कर)

$('#button').unbind('change'); 
$('#button').bind('change', function() { 
    if(this.files[0] !== undefined && this.files[0] !== null) { 
     document.getElementById("out").innerHTML = "Type is " + this.files[0].type.toString();   
    } else { 
     throw "Error" 
    } 
}); 

धन्यवाद

संपादित

1) यह अद्यतन करने के लिए अद्यतन प्रश्न यह है कि Windows 8.1 फ़ायरफ़ॉक्स पर समस्या देखी गई है। क्रोम में टैर फाइलों के लिए एक माइम प्रकार है, लेकिन रार फाइल नहीं है।

2) फिडल

+2

आप अपने बेला के लिए jQuery में नहीं जोड़ा। पुष्टि की कि टैर फाइलों के साथ काम न करें। – DanFromGermany

+1

आप किस ऑपरेटिंग सिस्टम पर हैं? यह हो सकता है कि ब्राउज़र माइम प्रकार हल करने ऑपरेटिंग सिस्टम के लिए सौंपने का है, या वहाँ कि फाइल एक्सटेंशन और उसके माइम प्रकार के बीच ब्राउज़र विन्यास में कोई संबंध नहीं है। अपने ब्राउज़र को कॉन्फ़िगर करने का प्रयास करने के लिए यह पता लगाने के लिए कि कौन सा बाहरी प्रोग्राम .tar या .arar खोलना चाहिए। शायद वह मदद करेगा? –

+1

यह rar और टार के लिए ठीक है, यह रिटर्न: प्रकार MacOS/क्रोम पर आवेदन/x-rar (या एक्स-टार) है। आप किस ओएस/ब्राउज़र पर इसका परीक्षण कर रहे हैं? – enguerranws

उत्तर

11

JQuery बस सबसे ब्राउज़रों में इस्तेमाल किया अंतर्निहित फ़ाइल एपीआई लपेटता के लिए jQuery जोड़ा गया, तो वहाँ कोई अंतर कैसे JQuery और जावास्क्रिप्ट फ़ाइलें और माइम प्रकार संभाल है। यहाँ फ़ाइल एपीआई युक्ति है:

http://www.w3.org/TR/FileAPI/#dfn-type

File उद्देश्य यह है कि आप Blob वस्तु से विरासत में मिली जोड़ तोड़ कर रहे हैं प्रकार संपत्ति, और ब्राउज़र ब्लॉब (बाइट सरणी) का उपयोग करता माइम प्रकार निर्धारित करने के लिए।

उस कार्य को पूरा करने के लिए प्रत्येक ब्राउज़र बाइट सरणी से माइम प्रकार को "पढ़ने" के लिए एल्गोरिदम को स्नीफ करने वाली फ़ाइल लागू करता है, और यदि माइम प्रकार मेल नहीं खाता है, तो यह उपरोक्त आपके परिदृश्य में एक खाली स्ट्रिंग वापस कर देगा। तो अब

https://mimesniff.spec.whatwg.org/

कारण है कि यह टीएआर, ज़िप और RAR फ़ाइलों के लिए काम नहीं करता है अगर आप सोच रहे हैं, और क्यों यह कुछ लोगों को और नहीं के लिए के लिए काम करता है:

यहाँ पूर्ण एल्गोरिथ्म कल्पना है आप? .. क्योंकि फाइल एल्गोरिदम स्नीफिंग स्पष्ट रूप से सही नहीं है।

यह बाइट पैटर्न मिलान का उपयोग करता है, और यह पर्याप्त विश्वसनीय नहीं लगता है।

उदाहरण के लिए मैं 8 बॉक्स मेरी खिड़कियों पर WinRAR का इस्तेमाल किया है एक फ़ाइल संपीड़ित करने के लिए, और बनाई गई फ़ाइल के प्रारंभिक बाइट्स हैं:

52 61 72 21 1A 07 00

हालांकि, यह के रूप में पहचान करने के लिए।RAR ब्राउज़र बाइट पैटर्न मिलान एल्गोरिथ्म उम्मीद

52 61 72 20 1A 07 00

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

हालांकि, जब मैं एक ही मशीन डिफ़ॉल्ट सेटिंग के साथ यह 50 4B 03 04 की एक प्रारंभिक बाइट सरणी अनुक्रम उस ज़िप बाइट पैटर्न एल्गोरिथ्म द्वारा की उम्मीद के साथ मिलान उत्पन्न करता है, और पर WinRar का उपयोग कर एक ज़िप फ़ाइल पैक जब मैं यह ऊपर अपने कोड का इस्तेमाल किया आवेदन/ज़िप के रूप में सही ढंग से माइम प्रकार पता लगाने में सक्षम हो गया था!

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

ऊपर उल्लेख किया है सब कुछ के आधार पर, मैं माइम सूँघने पर भरोसा नहीं की सलाह देते हैं, और बदले में माइम प्रकार या मौजूदा पुस्तकालयों निर्धारित करने के लिए अपने कस्टम कोड का प्रयोग करेंगे। आप सर्वर-साइड या क्लाइंट-साइड दृष्टिकोण का उपयोग कर सकते हैं।

आप ग्राहक आप निम्नलिखित जे एस पुस्तकालय इस्तेमाल कर सकते हैं पर कायम करना चाहते हैं:

https://github.com/rsdoiel/mimetype-js

और फिर माइम प्रकार की खोज कर कोड की एक पंक्ति की बात होगी:

यहाँ, एक काम कर फिडल है माइम प्रकार js उपयोग करने के लिए अपने उदाहरण के उन्नयन:

http://jsfiddle.net/jd8h7wvs/4/

+1

बस यह स्पष्ट करें कि यह स्पष्ट नहीं था: "mimetype.js" एक साधारण लुकअप टेबल है। यह फ़ाइल के विस्तार के आधार पर काम करता है और इसी प्रकार के कैटलॉग के भीतर खोज करता है। – Academia

+0

शानदार। यही वह है जिसकी तलाश में मैं हूं। बक्षीस तुम्हारा सब कुछ है (और अगर मैं खुद ऐसा कहता हूं तो यह अच्छी तरह से योग्य है)। –

+0

... 16 घंटों में (मैं इसे अपनी todo सूची में जोड़ दूंगा) –

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