0

假设我的模型上有一个回形针附件,它的大小验证为 10GB,并且一群用户上传了最大大小的图像。

如果我随后将大小验证更改为更小的值,例如 5GB,则以前上传的任何大于新验证的图像现在都无效。因此,即使尝试触摸模型也会失败,因为此验证失败。调用reprocess!图像并没有帮助,因为它只是重新处理styles但不会调整原始图像的大小。

在这里可以做些什么来验证不再通过更新、更小尺寸验证的旧图像?

4

1 回答 1

0

最后只是直接使用 imagemagick 编写脚本来调整现有图像的大小(一次 50%),然后重新保存它。假设型号名称Model和回形针附件picture

puts "Finding and resizing images from models..."
invalid_models = Model.where("picture_file_size > 10_000_000")
puts "Found #{invalid_models.count} models with oversized images"

invalid_models.each do |m|
  puts "Model #{m.id} has image with size #{m.picture.size}"
  while(!m.valid?) do
    puts "\tShrinking by 50%..."
    tmp_filename = "/tmp/#{m.picture_file_name}"
    %x(convert #{m.picture.url} -resize 50% #{tmp_filename})
    m.picture = open(tmp_filename)
    m.save(validate: false) # skip validations in case it's still too large
    puts "\tNew size=#{m.picture.size}, valid?=#{m.valid?}"
  end
end
puts "Done!"
于 2017-03-17T17:22:09.387 回答