【发布时间】:2011-06-08 12:26:28
【问题描述】:
我在上传文件时遇到问题。我想允许用户上传系统允许的文件...
例如,我允许用户上传扩展名为 *.jpg 的文件。因此,在文件选择窗口中,他们只能看到带有 jpg 扩展名的文件。
我怎样才能在 RoR 中获得这个?
【问题讨论】:
标签: ruby-on-rails ruby
我在上传文件时遇到问题。我想允许用户上传系统允许的文件...
例如,我允许用户上传扩展名为 *.jpg 的文件。因此,在文件选择窗口中,他们只能看到带有 jpg 扩展名的文件。
我怎样才能在 RoR 中获得这个?
【问题讨论】:
标签: ruby-on-rails ruby
在 HTML5 中,您可以使用 :accept 来限制 mime 类型,如下所示:
<%= file_field_tag :csv_file, :accept => 'text/csv' %>
【讨论】:
这个问题的答案可能与 html 上传有关,而不是 rails。
当您要上传文件时,通常使用 type="file" 进行输入。
这可以在 Rails 中使用file_field_tag helper 来完成。它会生成一个带有 type="file" 的输入,它也可以有一个 accept 属性,但你不能真正使用它,因为它不会真正产生任何可见的效果。这个属性接受 MIME 类型,而不是扩展,大多数浏览器甚至不使用它。
您可以做的最好的事情可能是在上传之前使用 javascript 检查文件扩展名(在您从对话框中选择文件之后)。在this question 中阅读更多相关信息。
关键是,您不能强制操作系统只显示您想要的文件扩展名。您可以在上传之前使用 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
【讨论】:
<%= file_field_tag :file, accept: 'image/jpg'%>
在轨道 5.2 上
【讨论】: