Rails file_field大小限制

时间:2017-05-30 16:53:16

标签: javascript ruby-on-rails file input upload

我目前使用以下内容上传图片,但我还想添加一项限制,阻止用户上传50px以内height以内的任何文件。这可能吗?

file_field "form", "image", accept: 'image/png,image/gif,image/jpeg'

2 个答案:

答案 0 :(得分:1)

  

这可能吗?

是的,这是可能的,但你需要一些javascript在客户端这样做,这是一个例子。将html输入更改为rails helper。

html

<input id="image" name="img" type="file" />
/*  */
<img src="#" alt="This image is going to load" id="image_on_load" />
<p id='image_info_width'>    </p>
<p id='image_info_heigth'>    </p>

js代码:

// The upload listner function
$('#image').on('change', function() {
  var img = document.getElementById('image_on_load');
  var reader = new FileReader();
  // add uploaded image to the img element
  reader.onloadend = function() {
    $('#image_on_load').prop('src', reader.result)
  }
  reader.readAsDataURL(this.files[0]);
  // listen onload event and get dimension
  img.onload = function(image) {

    $('#image_info_width').text('Width: ' + image.target.width)
    $('#image_info_heigth').text('Height: ' + image.target.height)
    // here you able to upload or reject
    // file accourding to dimension
  }
});

在此示例中,图片已上传,您可以获得宽度和高度。

JSFIDDLE

阅读Rails中JS的工作原理 7 Must-Reads about JavaScript with Ruby on Rails

答案 1 :(得分:1)

试试这个,也许这会对你有所帮助:Reference

validate :validate_image_size

def validate_image_size
  image = MiniMagick::Image.open(picture.path)
  unless image[:height] < 50
    errors.add :image, "should be 50px minimum!" 
  end
end

如果您使用MiniMagick,这将适用于您。