在制作裁剪版本后,我很难让Carrierwave删除原始文件。我正在制作一个600像素的上传版本供用户裁剪但是裁剪之后我希望该版本被删除,因为它从未在网站上使用过。
我尝试过在网上找到的几个解决方案,但他们都在裁剪之前删除了大版本,而不是之后。
这是我的Carrierwave上传器:
{{1}}
答案 0 :(得分:1)
您可以使用after_store
回调删除原始文件(使用File.delete
),也可以修改原始文件,使其成为您需要的最大尺寸:
version :normal do
process :resize_to_limit => [600,600]
end
答案 1 :(得分:0)
对于那些试图为图像名称添加一些修订信息(例如裁剪)的情况来解决问题的人,我找到了一种方法来做到这一点。
# :large is the cropped version
version :small_square, from_version: :large do
before :cache, :reset_revision
after :store, :remove_old_revision
def full_filename(for_file)
fname = super(for_file)
"#{ fname.pathmap('%n') }_#{ model.image_revision }#{ fname.pathmap('%x') }"
end
def full_original_filename
"#{ super.pathmap('%n') }_#{ model.image_revision }#{ super.pathmap('%x') }"
end
def remove_old_revision(file = nil)
File.delete(@old_path) if @old_path && File.exists?(@old_path)
end
def reset_revision(file = nil)
# Otherwise we'll get `cannot update new record` error
if model.persisted?
# Creating an instance variable that will be used after storing the cropped version
@old_path = File.join(Rails.public_path, model.public_send(mounted_as).store_dir, full_original_filename)
# I use :image_revision column in the DB
model.update_columns(image_revision: SecureRandom::hex(8))
else
model.image_revision = SecureRandom::hex(8)
end
end
process :crop_small_square
end
因此,在更改生成的图像名称然后删除第一个版本之前,它会存储裁剪版本的第一个版本的路径。
花了一些时间来弄清楚如何将一些abracadabra附加到文件的确定版本的末尾:它采取更新操作,而不仅仅是分配属性。 Carrierwave的文档并不准确。