Как проверить тип содержимого файла на 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
Ответ 2
посмотрите Подтвердите расширение в папке - Ruby on Rails (при принятом ответе)
Ответ 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 в своем приложении.