Как проверить тип содержимого файла на pdf, word, excel и plain text для paperclip?

В моей модели:

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

И после этого он может загружать только документы PDF, а не Excel или текстовые документы. Пожалуйста, помогите мне, где мне не хватает!

Ответы

Ответ 1

Я не знаю, решили ли вы это для себя, но вам не нужны типы 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

Ответ 3

Это зависит от команды сервера. То, что эта команда возвращает вам, - это то, что вам нужно принять в проверках скрепки.

Например, мой сервер Debian возвращает "application/msword" для файла xls. И для xlsx файла он дает "application/zip".

В настоящее время я могу принять файлы 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)

Ответ 4

Для любых файлов, если вы загружаете, если вы не знаете тип содержимого этого средства, загрузите его с самим этим документом, а после этого проверьте журнал разработки (или терминал), в каком content_type это. затем измените content_type в своем приложении.