我使用Cloudinary和CarrierWave从我的Rails应用程序上传图像,它运行正常。
我的要求是用户可以拥有一个图像,因此如果用户已经有一个图像,并且他/她上传了一个新图像,则新图像应该覆盖前一个图像。
我的问题是,当我将新图像上传到Cloudinary时,它不会使之前的图像无效,因此旧图像仍显示为用户图像。
然后我找到了一个名为invalidate
的选项并尝试使用它,但没有运气。
这是我的Cloudinary
班级
class PictureUploader < CarrierWave::Uploader::Base
include Cloudinary::CarrierWave
version :show do
process :invalidate => true
end
end
和我的观点
recipe.picture_url(:show)
但这显示旧图像而不是新图像。我错过了什么?
答案 0 :(得分:3)
首次访问Cloudinary图像时,它会缓存在CDN中。 您确实可以通过在保留公共ID的同时重新上传来更新图像,但是如果您访问相同的URL,则可能仍然可以使用图像的CDN缓存版本。
您可以通过CDN告知Cloudinary使图像无效,但请注意,启用invalidate
参数应包含在上传过程中,而不是“版本”块中,因为在重新启用时会应用无效上传而非发货。另请注意,失效可能需要一个小时才能完全通过CDN传播。
建议改用versions component。将“版本”组件添加到URL会导致Cloudinary强制传递最新版本的映像,同时绕过CDN缓存版本。每次上传调用都会返回更新的版本值。欲获得更多信息: http://cloudinary.com/documentation/rails_image_manipulation#image_versions
虽然传播失效需要一段时间,但“版本”组件会立即生效。