2009-12-30 9 views
16

मैं HTML इनपुट फ़ाइल प्रकार के साथ फ़ाइल प्रकारों को कैसे प्रतिबंधित करूं?HTML इनपुट फ़ाइल प्रकार के साथ फ़ाइल प्रकारों को प्रतिबंधित कैसे करें?

मैं इस

<input type="file" id="fileUpload" name="fileUpload" size="23" accept="Calendar/ics"/> 

मैं केवल iCalendar स्वरूप प्रकार के प्रकार को प्रतिबंधित करने के कोशिश कर रहा हूँ है।

मैं इसे सर्वर की तरफ भी देखना चाहता हूं। मैं इसे ASP.NET MVC में कैसे कर सकता हूं?

उत्तर

20

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

आप इस ईवेंट हैंडलर को जोड़ सकते हैं।

filebox.Attributes.Add("onchange", "fileSelectedChanged(this);"); 

और इस जावास्क्रिप्ट समारोह

function fileSelectedChanged(obj) { 
    var filePath = obj.value; 

    var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase(); 
    if(ext != 'csv') { 
     alert('Only files with the file extension CSV are allowed'); 
    } else { 
     document.getElementById('form1').submit(); 
    } 
} 

तुम भी सर्वर पर जांच होनी चाहिए, का उपयोग करते हुए:

filebox.PostedFile.FileName 

और:

filebox.PostedFile.ContentType 
+0

क्या आपका मतलब है कि जब वे सर्वर पर फ़ाइल अपलोड करते हैं या जब वे "फ़ाइल संवाद चुनें" में फ़ाइल पर क्लिक करते हैं? – chobo2

+0

यह जावास्क्रिप्ट में किया जाता है जब उपयोगकर्ता एक नई फ़ाइल का चयन करता है (मैंने आपके लिए एक फ़ंक्शन शामिल किया है) –

+0

अगर यह आपकी समस्या को हल करने में मदद करता है तो यह उत्तर स्वीकार करना याद रखें। –

3

पाठ/कैलेंडर है दायां माइम प्रकार

<input type="file" id="fileUpload" name="fileUpload" size="23" accept="text/calendar" /> 
+4

वर्तमान ब्राउज़र आमतौर पर ACCEPT विशेषता –

+0

कूल को अनदेखा करते हैं, स्वीकृति विशेषता के बारे में नहीं जानते थे। अभी भी सर्वर-साइड ऑफसी को सत्यापित करने की आवश्यकता है, लेकिन सर्वर पर संसाधन उपयोग को कम करने में मदद कर सकते हैं क्योंकि सर्वर को मारने वाली फ़ाइलों को चेक करने की आवश्यकता नहीं है। –

+0

के रूप में गेब्रियल ने कहा कि यह विशेषता आम तौर पर प्रमुख ब्राउज़रों द्वारा प्रायोजित की जाती है, इसलिए आपको "प्री-सत्यापन" के लिए जावास्क्रिप्ट का उपयोग करना होगा। – Flatlin3

0

आप निर्दिष्ट नहीं कर सकते कि उपयोगकर्ता किस प्रकार की फाइल चुन सकता है। उपयोगकर्ता को फॉर्म सबमिट करने से रोकने के लिए आप जावास्क्रिप्ट का उपयोग कर सकते हैं, लेकिन यह पर्याप्त नहीं है। जावास्क्रिप्ट को ब्राउज़र में आसानी से अक्षम किया जा सकता है। आप सर्वर साइड कि अपलोड की सामग्री प्रकार का मूल्यांकन करता है पर तर्क की जरूरत है (यहां तक ​​कि सिर्फ फाइल एक्सटेंशन जाँच पर्याप्त वास्तव में अच्छा नहीं है) ...

HttpPostedFile file = Request.Files(0); 

if(file.ContentType != "text/calendar") 
{ 
    //Error 
} 
0

स्वीकार आप contetypes का उपयोग करना चाहिए नोटिस विशेषता है कि instaed , वहाँ contentypes

में और इस तरह

HttpPostedFileBase फ़ाइल = Request.Files [0] सर्वर कोड की जांच में एक "टी" है

if (! File.ContentType.startsWith ("text/कैलेंडर")) { // त्रुटि }

आशा है कि यह आपकी समस्या मार्क sove अगर यह होगा मेरा उत्तर।

0

मैं व्यक्तिगत रूप से Uploadify जैसे कुछ पसंद करता हूं जो आपको ऐसा करने देता है, और एक फैंसी प्रगति पट्टी भी प्रदान करता है ... मुझे नहीं पता कि यह आपके लिए थोड़ा "भारी वजन" है या नहीं।

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