【问题标题】:How to limit only images to be uploaded through file_field tag?如何限制仅通过 file_field 标签上传的图片?
【发布时间】:2012-06-05 11:24:11
【问题描述】:
<%= form_for @model_name, :url => {:controller => 'controller_name', :action => 'index'},:html => {:multipart => true},:validate => true do |f| %>

<%= file_field 'upload', 'datafile'%>

<% end %>

我有这个表格。我想通过这个上传只上传图片。如何做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby forms


    【解决方案1】:

    HTML5

    <%= f.file_field :file, multiple: true, accept:'image/*' %>
    

    【讨论】:

    • 这将禁止在文件浏览器中选择非图像文件,但仍然可以将文件拖放到文件字段按钮上。 (在 Chrome、Mac 上测试)
    • 可靠的解决方案还必须包括后端验证... Chris Bailey 提供了补充验证。
    【解决方案2】:

    您可以使用paperclip gem 来管理文件附件。它有 validates_attachment 验证器,这会很有帮助。

    validates_attachment :avatar, :presence => true,
      :content_type => { :content_type => "image/jpg" },
      :size => { :in => 0..10.kilobytes }
    

    【讨论】:

    • 回形针已弃用。我对 Chris Bailey 的解决方案投了赞成票
    【解决方案3】:

    您仍然可以根据内容类型进行简单的验证:

    class MyModels < ActiveRecord::Base
    
      validate :upload_is_image
    
      ...
    
      private
    
      def upload_is_image
        unless upload and upload.content_type =~ /^image\/(jpeg|pjpeg|gif|png|bmp)$/
          errors.add(:upload, "Not a valid image")
        end
      end
    
    end
    

    显然,您可以根据要接受的图像类型来调整正则表达式。

    【讨论】:

      猜你喜欢
      • 2017-10-31
      • 2019-05-06
      • 2013-06-04
      • 2017-02-25
      • 2016-07-21
      • 2021-08-20
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      相关资源
      最近更新 更多