Jam*_*sir 17 ruby ruby-on-rails
我在上传文件时遇到问题.我想允许用户上传系统允许的文件...
例如,我允许用户上传扩展名为*.jpg的文件.因此,在文件选择窗口中,他们必须只看到具有jpg扩展名的文件.
我怎样才能在RoR中获得这个?
Rog*_*ger 18
使用HTML5,您可以使用:accept来限制mime类型,如下所示:
<%= file_field_tag :csv_file, :accept => 'text/csv' %>
Run Code Online (Sandbox Code Playgroud)
And*_*i S 10
这个问题的答案可能更多与html上传相关而不是rails.
如果要上载文件,通常会使用type ="file"进行输入.
这可以通过使用file_field_tag帮助程序在Rails中完成.它将生成一个type ="file"的输入,它也可以有一个accept属性,但你不能真正使用它,因为它实际上不会有任何可见的效果.此属性接受MIME类型,而不是扩展,大多数浏览器甚至不使用它.
您可以做的最好的事情可能是在上传之前使用javascript检查文件扩展名(从对话框中选择文件后).在这个问题中阅读更多相关信息.
关键是,您不能强制操作系统只显示您想要的文件扩展名.您可以在上传之前使用JS验证扩展,或者在上载,服务器端之后检查文件的内容
首先,您可以使用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