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

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

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

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

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

如果要上载文件,通常会使用type =“file”进行输入。

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

您可以做的最好的事情可能是在上传之前检查文件扩展名(在从对话框中选择文件后)。 在这个问题中阅读更多相关信息。

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

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

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

首先,您可以使用extname方法validation要保存的文件。 http://apidock.com/ruby/File/extname/class

其次,我使用Paperclip gem https://github.com/thoughtbot/paperclip上传文件。 有validation扩展的validate_attachment_content_type方法: http : //rdoc.info/gems/paperclip/2.3.8/Paperclip/ClassMethods#validates_attachment_content_type-in​​stance_method