我有一个常规文件上传,我现在改为使用Cloudinary。
上传后,我执行以下操作以防止从移动设备上传图片时出现方向故障(有关详细信息,请参阅exif image rotation issue using carrierwave and rmagick to upload to s3):
process :rotate
process :store_dimensions
def rotate
manipulate! do |image|
image.tap(&:auto_orient)
end
end
def store_dimensions
# This does not work with cloudinary #18
if file && model
model.width, model.height = ::MiniMagick::Image.open(file.file)[:dimensions]
end
end
由于我切换到cloudinary,因此旋转和存储尺寸都不起作用。
现在Cloudinary有an official tutuorial显示如何执行此操作,但它根本不起作用,而其他人似乎也有同样的问题,并且所提供的选项都不适用于我:
答案 0 :(得分:0)
我能够使用第一个选项的变体来使其工作:
after_save :update_dimensions
def update_dimensions
if self.image != nil && self.image.metadata.present?
width = self.image.metadata["width"]
height = self.image.metadata["height"]
self.update_column(:width, width)
self.update_column(:height, height)
end
end
重要:由于我们在after_save
回调中,因此使用update_column
至关重要,这样我们就不会触发另一个回调并以无限循环结束。
修复所提供的解决方案:
self.image.present?
返回false
但self.image != nil
退回true
。