Ограничить загрузку файлов на некоторые расширения файлов

У меня проблема с загрузкой файлов. Я хочу разрешить пользователям загружать файлы, которые система разрешает...

Например, я разрешаю пользователям добавлять расширение *. jpg. Таким образом, в окне выбора файла они должны видеть только файлы с расширением jpg.

Как я могу получить это в RoR?

Ответы

Ответ 1

Ответ на этот вопрос, вероятно, больше связан с загрузкой html, чем с рельсами.

Если вы хотите загрузить файл, вы обычно делаете ввод с type="file".

Это можно сделать в Rails с помощью file_field_tag ​​helper. Он будет генерировать вход с type="file", который также может иметь атрибут accept, но вы не можете его использовать, потому что он не будет иметь никакого видимого эффекта. Этот атрибут принимает типы MIME, а не расширения, и большинство браузеров даже не используют его.

Лучшее, что вы можете сделать, - это, вероятно, проверить javascript расширение файла перед загрузкой (после выбора файла из диалогового окна). Подробнее об этом читайте в этом вопросе.

Дело в том, что вы не можете заставить ОС показывать вам только расширения файлов, которые вы хотите. Вы можете либо проверить расширение, используя JS, например, перед загрузкой, либо проверить содержимое файла после загрузки, на стороне сервера

Ответ 2

С HTML5 вы можете использовать: accept для ограничения mime-типов, например:

 <%= file_field_tag :csv_file,  :accept => 'text/csv' %>

Ответ 3

Во-первых, вы можете использовать метод extname для проверки файлов, которые вы сохраняете. http://apidock.com/ruby/File/extname/class

Во-вторых, я использую Paperclip gem https://github.com/thoughtbot/paperclip для загрузки файлов. Существует метод validate_attachment_content_type для проверки расширений: http://rdoc.info/gems/paperclip/2.3.8/Paperclip/ClassMethods#validates_attachment_content_type-instance_method