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

时间:2011-01-13 13:45:59

标签: ruby-on-rails ruby

我在上传文件时遇到问题。我想允许用户上传系统允许的文件......

例如,我允许用户上传扩展名为 *。jpg 的文件。因此,在文件选择窗口中,他们必须只能看到 jpg 扩展名的文件。

我怎样才能在RoR中获得这个?

4 个答案:

答案 0 :(得分:18)

使用HTML5,您可以使用:accept来限制mime-types,如下所示:

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

答案 1 :(得分:10)

这个问题的答案可能更多与html上传相关而不是rails。

如果要上传文件,通常会输入type =“file”。

可以使用file_field_tag helper在Rails中完成此操作。它将生成一个type =“file”的输入,它也可以有一个 accept 属性,但你不能真正使用它,因为它实际上不会有任何可见的效果。此属性接受MIME类型,而不是扩展,大多数浏览器甚至不使用它。

你可以做的最好的事情可能是在上传前检查文件扩展名(在从对话框中选择文件后)。请在this question中了解详情。

关键是,您无法强制操作系统仅向您显示所需的文件扩展名。您可以在上传之前使用JS验证扩展,或者在上载之后检查文件的内容,服务器端

答案 2 :(得分: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-instance_method

答案 3 :(得分:0)

<%= file_field_tag :file, accept: 'image/jpg'%>

在Rails 5.2上