2011-01-13 23 views
14

मुझे फ़ाइलों को अपलोड करने में कोई समस्या है। मैं उपयोगकर्ताओं को उन फ़ाइलों को अपलोड करने की अनुमति देना चाहता हूं जो सिस्टम को अनुमति देता है ...फ़ाइल अपलोड को कुछ फ़ाइल एक्सटेंशन पर प्रतिबंधित करें

उदाहरण के लिए, मैं उपयोगकर्ताओं द्वारा अपलोड किए जाने के लिए * .jpg का विस्तार करने वाली फ़ाइलों को अनुमति देता हूं। इसलिए, फ़ाइल चयन विंडो में उन्हें केवल jpg एक्सटेंशन वाली फ़ाइलों को देखना होगा।

मैं इसे RoR में कैसे प्राप्त कर सकता हूं?

उत्तर

8

इस प्रश्न का उत्तर शायद रेल से अधिक HTML अपलोडिंग से संबंधित है।

जब आप कोई फ़ाइल अपलोड करना चाहते हैं, तो आप आमतौर पर टाइप = "फ़ाइल" के साथ इनपुट करते हैं।

यह file_field_tag helper का उपयोग करके रेल में किया जा सकता। यह टाइप = "फाइल" के साथ एक इनपुट उत्पन्न करेगा जिसमें विशेषता स्वीकार कर सकता है, लेकिन आप वास्तव में इसका उपयोग नहीं कर सकते क्योंकि यह वास्तव में कोई दृश्य प्रभाव नहीं पड़ता है। यह विशेषता MIME प्रकार स्वीकार करती है, एक्सटेंशन नहीं, और अधिकांश ब्राउज़र इसका भी उपयोग नहीं करते हैं।

सबसे अच्छी बात तो आप शायद एक जावास्क्रिप्ट जाँच अपलोड करने से पहले फाइल एक्सटेंशन (आप संवाद बॉक्स से फ़ाइल का चयन करने के बाद) है है कर सकते हैं। this question में इसके बारे में और पढ़ें।

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

+1

जावास्क्रिप्ट का उपयोग करना एक अच्छा विचार नहीं है क्योंकि इसे आसानी से अवरुद्ध किया जा सकता है। सर्वर-साइड सत्यापन के साथ बेहतर जाएं, उदा। जैसा कि पेपरक्लिप द्वारा समर्थित है। –

+3

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

7

सबसे पहले आप आप बचत कर रहे हैं फ़ाइलें सत्यापित करने extname विधि का उपयोग कर सकते हैं। http://apidock.com/ruby/File/extname/class

दूसरा, मैं फ़ाइलों को अपलोड करने के लिए पेपरक्लिप मणि https://github.com/thoughtbot/paperclip का उपयोग करता हूं। एक्सटेंशन मान्य करने के लिए validate_attachment_content_type विधि है: http://rdoc.info/gems/paperclip/2.3.8/Paperclip/ClassMethods#validates_attachment_content_type-instance_method

13

एचटीएमएल 5 के साथ आप उपयोग कर सकते हैं की सामग्री की जाँच:, माइम-प्रकार सीमित तो जैसे के लिए स्वीकार करते हैं:

<%= file_field_tag :csv_file, :accept => 'text/csv' %> 
+0

"csv_file" क्या है? क्या यह बनाया गया है? – Jubl

+1

@ जुबल नो फ़ील्ड का नाम नहीं है। एपीआई http://apidock.com/rails/ActionView/Helpers/FormTagHelper/file_field_tag ​​ – Roger

+0

पर एक नज़र डालें, आप एकाधिक फ़ाइल एक्सटेंशन कैसे स्वीकार करेंगे? – Ctpelnar1988

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