How to validate file content type to pdf, word, ex

2020-05-26 04:45发布

In my model:

 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. '

And after this, it can upload only PDF documents, not excel or word or text docs. Please help me where I am missing!

3条回答
啃猪蹄的小仙女
2楼-- · 2020-05-26 05:18

This is actually dependent on your servers 'file' command. What that command returns to you is what you need to be accepting in the paperclip validations.

For example my Debian server returns "application/msword" for an xls file. And for an xlsx file it gives "application/zip".

I currently have these to accept xls and xlsx files.

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)
查看更多
做个烂人
3楼-- · 2020-05-26 05:19

For any files if you are uploading, if you don't know the content type of that means, checkout uploading with that document itself, and after this, check in the development log(or terminal) which content_type it is...then change that content_type in your application.

查看更多
Anthone
4楼-- · 2020-05-26 05:41

I don't know if you have solved this for yourself but you are missing MIME types for the documents you want to handle try changing :content_type to:

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

Or use a custom validation

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
查看更多
登录 后发表回答