限制文件上载到某些文件扩展名

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验证扩展,或者在上载,服务器端之后检查文件的内容

  • 我不建议使用javascript进行验证,但仅作为形式(我的意思是..为什么让某人上传带有错误扩展名的图片).如果用户上传文件,即使有所需的扩展名,显然它必须在服务器端检查.但这不是问题所在.问题是它是否可以在上传之前进行验证(可能是为了节省上传无效内容的时间.至少我是这样看的) (3认同)

fl0*_*00r 7

首先,您可以使用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-in​​stance_method