2010-11-24 33 views
8

मैं वेब एप्लिकेशन में सादा-पाठ फ़ाइलों के लिए एक आयात स्क्रिप्ट सेट अप कर रहा हूं।जावास्क्रिप्ट के FileReader इंटरफ़ेस का उपयोग करते समय फ़ाइल की सामग्री-प्रकार का पता लगाना

मेरे स्क्रिप्ट इस प्रकार है:

function dataImport(files) { 
    confirm("Are you sure you want to import the selected file? This will overwrite any data that is currently saved in the application workspace."); 
    for (i = 0; i < files.length; i++) { 
     file = files[i] 
     console.log(file) 
     var reader = new FileReader() 
     ret = [] 
     reader.onload = function(e) { 
      window.localStorage.setItem("ApplicationData", e.target.result); 
     } 
     reader.onerror = function(stuff) { 
      console.log("error", stuff) 
      console.log (stuff.getMessage()) 
     } 
     reader.readAsText(file) 
    } 
} 

यह अनिवार्य रूप this question पर उत्पन्न कि एक संशोधन है।

हालांकि, इस समय उपयोगकर्ता तकनीकी रूप से किसी भी फ़ाइल को आयात करने का प्रयास कर सकता है। चूंकि यह सादे-पाठ फ़ाइलों के लिए डिज़ाइन किया गया है, यदि कोई अलग प्रकार की फ़ाइल आयात की जाती है तो समस्याएं उत्पन्न हो सकती हैं।

मैंने कंसोल में देखा है कि ब्राउज़र आयात की जाने वाली फ़ाइल के सामग्री-प्रकार का पता लगाता है। यहां एक उदाहरण दिया गया है।

fileName: "ideas.txt" 
fileSize: 377 
name: "ideas.txt" 
size: 377 
type: "text/plain" 
webkitRelativePath: "" 

यह संभव है, तो, एक तर्क जहां स्क्रिप्ट फ़ाइल की सामग्री प्रकार का पता लगाता है स्थापित करने के लिए, और अगर यह निर्दिष्ट उपयुक्त सामग्री प्रकार की एक संख्या में से एक नहीं है, स्क्रिप्ट है है इसे आयात करने से इंकार कर दिया?

किसी भी सलाह के लिए अग्रिम धन्यवाद।

+0

मुझे लगता है कि, 'पता लगाने सामग्री प्रकार' द्वारा यू मतलब है, फ़ाइल का विस्तार से निष्कर्ष निकालते .. –

+0

का निष्कर्ष निकालते विस्तार के द्वारा एक तरह से यह करने के लिए होगा, लेकिन मुझे उम्मीद थी कि मैं कर सकता जो कुछ भी बताता है उसे एक्सेस करें एक फ़ाइल है, उदाहरण के लिए, "टेक्स्ट/सादा" या "टेक्स्ट/एक्स-टेक" या "छवि/जेपीईजी" और इसी तरह से। –

उत्तर

14
if (file.type.match('text/plain')) { 
    // file type is text/plain 
} else { 
    // file type is not text/plain 
} 

String.match एक रेगुलर एक्सप्रेशन से है, इसलिए यदि आप जांच करने के लिए, यदि फ़ाइल पाठ के किसी भी प्रकार है चाहेगा, आप ऐसा कर सकता है:

if (file.type.match('text.*')) { 
    // file type starts with text 
} else { 
    // file type does not start with text 
} 
10

सामग्री प्रकार के साथ पढ़ा जा सकता है निम्नलिखित कोड:

// Note: File is a file object than can be read by the HTML5 FileReader API 
var reader = new FileReader(); 

reader.onload = function(event) { 
    var dataURL = event.target.result; 
    var mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0]; 
    alert(mimeType); 
}; 

reader.readAsDataURL(file); 
+0

एक और विकल्प (सरल) बस जांचना है: dataURL.split (",") [0] .split (":") [1] .split (";") [0] .indexOf ([आपके माइम प्रकार] > = 0 – Alberto