2016-10-27 2 views
0

Мне нужно загрузить вложения с расширением .txt, но оценить команду mime-типа «приложение/октет-поток» командой file. Файл автоматически генерируется частью оборудования, и его невозможно переименовать перед загрузкой. Я пробовал:paperclip 5.1 проверка правильности содержимого слишком строгая

class Book < ActiveRecord::Base 
    has_attached_file :excerpt 
    validates_attachment_content_type :excerpt, content_type: { content_typ: ["text/plain", "application/octet-stream"]} 
    validates_attachment_file_name :excerpt, matches: [/txt\z/] 
end 

, но я всегда получаю ошибку, что обнаруженный тип содержимого не соответствует INFERRED Content-Type:

Command :: file -b --mime '/tmp/313a40bb0448477e051da1e2cba2c20120161027-19345-lrhf6t.txt' 
[paperclip] Content Type Spoof: Filename Sample.txt (text/plain from Headers, ["text/plain"] from Extension), content type discovered from file command: application/octet-stream. See documentation to allow this combination. 

сообщение об ошибке говорит, чтобы посмотреть в документации на пути чтобы позволить комбинацию, но я не смог найти ничего похожего на обходной путь. Видел это discussion, но это было для v4.

ответ

2

Это из-за ошибки в орфографии content_type ключ? (Вы ввести его в content_typ.)

Если первое предложение не работает, я думаю, что в вашем случае, вы хотите сделать это в config/initializers/paperclip.rb (в соответствии с инструкциями в разделе Security Validations риого в):

Paperclip.options[:content_type_mappings] = { 
    txt: %w(text/plain application/octet-stream) 
} 
1

Спасибо за указатель, Крис. Думаю, я не читал эту часть файла README достаточно внимательно. (Кстати, фиксируя опечатку не делает никакой разницы.)

Таким образом, решение выглядит следующим образом:

В config/initializers/paperclip.rb:

Paperclip.options[:content_type_mappings] = { 
    txt: %w(application/octet-stream) 
} 

В модели:

class Book < ActiveRecord::Base 
    has_attached_file :excerpt 
    validates_attachment_file_name :excerpt, matches: [/txt\z/] 
end 

Это работает, является ли фактический .txt-файл «текстовым/открытым» или «приложением/октетом-потоком».

Смежные вопросы