2012-01-11 2 views
16

अपने मॉडल में:फ़ाइल सामग्री प्रकार को पीडीएफ, शब्द, एक्सेल और पेपरक्लिप के लिए सादे पाठ को कैसे सत्यापित करें?

has_attached_file :uploaded_file, 
         :url => "/policy_documents/get/:id", 
         :path => "/public/policy_documents/:id/:basename.:extension" 

    validates_attachment_size :uploaded_file, :less_than => 10.megabytes  
    validates_attachment_presence :uploaded_file 
    validates_attachment_content_type :uploaded_file, :content_type =>['application/pdf', 'application/xlsx'], 
                 :message => ', Only PDF, EXCEL, WORD or TEXT files are allowed. ' 

और इस के बाद, यह केवल पीडीएफ दस्तावेजों अपलोड कर सकते हैं, एक्सेल या शब्द या पाठ डॉक्स नहीं। कृपया मेरी मदद करें जहां मैं लापता हूं!

उत्तर

42

मैं अगर आप खुद के लिए यह समाधान कर लिया है पता नहीं है, लेकिन आप दस्तावेजों आप हैंडल करना चाहते हैं के लिए MIME प्रकार याद कर रहे हैं करने के लिए :content_type बदलने का प्रयास करें:

:content_type => ["application/pdf","application/vnd.ms-excel",  
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
      "application/msword", 
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
      "text/plain"] 

या एक कस्टम सत्यापन

validate :correct_content_type, :message => ", Only PDF, EXCEL, WORD or TEXT files are allowed." 


def correct_content_type 
    acceptable_types = ["application/pdf","application/vnd.ms-excel",  
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
      "application/msword", 
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
      "text/plain"] 
    acceptable_types.include? uploaded_file.content_type.chomp 
end 
2
Validate extension in Paperclip - Ruby on Rails पर

नज़र (स्वीकार किए जाते हैं जवाब में)

+0

लिंक की तरफ इशारा करने के बजाय, आपको अपने उत्तर में कुछ कोड डालना पड़ सकता है; न्यूनतम कोड मेरे मरने का लिंक। –

2

यह वास्तव में अपने सर्वर 'फ़ाइल' कमांड पर निर्भर है का उपयोग करें। वह आदेश आपको वापस लौटाता है जिसे आपको पेपरक्लिप सत्यापन में स्वीकार करने की आवश्यकता होती है।

उदाहरण के लिए मेरा डेबियन सर्वर xls फ़ाइल के लिए "एप्लिकेशन/msword" देता है। और एक xlsx फ़ाइल के लिए यह "एप्लिकेशन/ज़िप" देता है।

मैं वर्तमान में इन्हें xls और xlsx फ़ाइलों को स्वीकार करने के लिए है।

validates_attachment_content_type :file, :content_type => %w(application/zip application/msword application/vnd.ms-office application/vnd.ms-excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) 
0

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

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