Ruby on rails 轨道,载体波图像旋转。图像旋转后,它会显示一个旧版本的图像,该图像已经不存在';不存在。
我做了一个rails项目,我使用carrierwave gem和jCrop jQuery插件来处理化身,我使用图像旋转。我已经用ajax实现了它,在旋转和保存新的图像位置后,我用图像路径呈现json。然后使用ajax:success,我把这个图像放到打开的croper表单中,继续处理头像。我看到,在每次请求后,图像都已旋转,但图像路径继续引用旋转前的旧版本图像。因此,我能够向用户显示第一个旋转结果(90度),因为其他旋转无论对图像是否有效,用户都无法看到,因为图像路径继续引用旧版本的图像 阿凡达上传器.rbRuby on rails 轨道,载体波图像旋转。图像旋转后,它会显示一个旧版本的图像,该图像已经不存在';不存在。,ruby-on-rails,caching,carrierwave,image-rotation,Ruby On Rails,Caching,Carrierwave,Image Rotation,我做了一个rails项目,我使用carrierwave gem和jCrop jQuery插件来处理化身,我使用图像旋转。我已经用ajax实现了它,在旋转和保存新的图像位置后,我用图像路径呈现json。然后使用ajax:success,我把这个图像放到打开的croper表单中,继续处理头像。我看到,在每次请求后,图像都已旋转,但图像路径继续引用旋转前的旧版本图像。因此,我能够向用户显示第一个旋转结果(90度),因为其他旋转无论对图像是否有效,用户都无法看到,因为图像路径继续引用旧版本的图像 阿凡达
class AvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
# Choose what kind of storage to use for this uploader:
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def serializable_hash
model.read_attribute :url
end
def extension_white_list
%w(jpg jpeg png)
end
version :large do
process :rotate!#by default 0 degrees
process :resize_to_limit => [500, 500]
end
version :rotation, from_version: :large do
end
def rotate!
manipulate! do |img|
img.rotate!(model.rotation_value)
end
end
我猜原因是CarrierWawe缓存图像。
我试图找出如何禁用缓存,但发现这是不可能的,
这对我不起作用
对我来说,重要的是,在图像旋转后,它被保存在服务器上,因为旋转后,图像应该异步加载到jCrop表单中,用户可以根据需要裁剪化身
如何禁用缓存,或者可能有其他解决方法?。
提前谢谢你的建议
class User::Avatar < ApplicationRecord
mount_uploader :image, AvatarUploader
belongs_to :user
def rotate_avatar!
#rotation angle I keep in a database
update(rotation_value: rotation_value + 90)
image.recreate_versions!
end
end
class UsersController < ApplicationController
def rotate_avatar
avatar = @user.avatars.last
avatar.rotate_avatar!
render json: {avatar: avatar.image_url(:rotation)}
end
$(document).on 'click', '.rotate-avatar-button', (e) ->
$("form.rotate-avatar").bind 'ajax:success', (e, data, status, xhr) ->
avatar_path = $.parseJSON(xhr.responseText)['avatar']
$('#avatar-modal-box').html(JST["templates/cropper"]({img_path: avatar_path}))