Ruby on rails ActiveStorage-Safari缓存的附件
我将ActiveStorage与默认磁盘服务一起使用。MyAPI返回图像URL,在前端(Vue.js)中,图像通过IMG标记嵌入。当我打开图像URL时,图像显示正确Ruby on rails ActiveStorage-Safari缓存的附件,ruby-on-rails,ruby,vue.js,rails-activestorage,Ruby On Rails,Ruby,Vue.js,Rails Activestorage,我将ActiveStorage与默认磁盘服务一起使用。MyAPI返回图像URL,在前端(Vue.js)中,图像通过IMG标记嵌入。当我打开图像URL时,图像显示正确 呈现json:{ image\u url:rails\u blob\u path(user.photo,仅\u path:true), .... } 当我查看源代码时,Safari一直试图调用旧的URL。这在5分钟后就不可能了。 我已尝试在中直接在初始值设定项中设置config.active\u storage.service
呈现json:{
image\u url:rails\u blob\u path(user.photo,仅\u path:true),
....
}
当我查看源代码时,Safari一直试图调用旧的URL。这在5分钟后就不可能了。
我已尝试在中直接在初始值设定项中设置config.active\u storage.service\u url\u expire\u,但这没有效果:
#config/initializers/active_storage.rb
Rails.application.config.active\u storage.service\u url\u expire\u in=1.5周
当我将图像放置为默认rails时,图像会获得不同的URL,并且不会过期:
image\u标签(user.photo)
# =>
rails\u blob\u路径(user.photo,仅\u路径:true)
#=>“../rails/active_storage/blobs/eyjfcmfpbhmionsibwzc2fnzsi6ikjbahbkqt09iiwizxhwijpudwxslcjwdxiioijibg9ix2lkin19--23e3b6283c346c75d7e6c1e769eacb6d428fec0e/user_photo.png”
我是否可能在api中使用image_标记的URL
Ruby版本:2.7.0
Rails版本:6.0.2.2我也遇到了同样的问题,因此我以以下解决方案结束
您的系统可能会有所不同,因为我对每个图像都有一个图像模型,以便能够将图像重新用于其他条目
因此,我在图像模型中添加了一个唯一的标记和一个媒体路径。
得到
媒体控制器:
def显示
返回头:如果origin.blank未找到?
发送文件路径,类型:origin.content\u类型,处置::inline
救援行动控制器::丢失文件,命名错误
将_重定向到回退
结束
私有的
def来源
@origin | |=Image.find_by(token:params[:token])
结束
def路径
@路径| |=原点。本地路径(参数[:大小])
结束
...
图片:
。。。
def本地_路径(大小=:中等)
img=图像大小(大小)
ActiveStorage::如果img.present存在,(img.key)的Blob.service.path_?
结束
def内容类型
file.blob和.content|type | |“image/png”
结束
...
image\u with_size
仅返回请求的文件变体。
也许我的方法对您的系统也有帮助。如果您需要获取服务url而不是表示url(通过url\u for
或image\u标签
),请使用service\u url
方法:
user.photo.service_url
对于变体:
user.photo.variant(resize_to_limit: [320, nil]).processed.service_url
processed
方法确保创建应用于原始版本的变体转换并将其上载到服务
如果您使用的是本地磁盘
服务,则应手动设置ActiveStorage::Current.host
,或者调用该方法的自定义控制器中应包含ActiveStorage::SetCurrent
问题
但是关于公开服务url存在争议,Rails建议对(variant)
使用user.photo.service\u url
。它对我有用