Ограничить загрузку файлов некоторыми расширениями файлов - PullRequest
17 голосов
/ 13 января 2011

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

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

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

Ответы [ 3 ]

18 голосов
/ 05 сентября 2012

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

 <%= file_field_tag :csv_file,  :accept => 'text/csv' %>
10 голосов
/ 13 января 2011

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

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

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

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

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

7 голосов
/ 13 января 2011

Во-первых, вы можете использовать метод 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...