我很難讓Carrierwave在裁剪後的版本中刪除原始文件。我爲用戶製作了600像素的上傳版本,但裁剪後我希望該版本被刪除,因爲它從未在網站上使用過。Carrierwave和Jcrop,裁剪後刪除原件?
我嘗試了幾種在線搜索的解決方案,但它們都在刪除作物之前的大版本,而不是之後。
這裏是我的Carrierwave上傳:
# encoding: utf-8
class AvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :file
# storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
# Only allows jpg, jpeg, or png
def extension_white_list
%w(jpg jpeg png)
end
resize_to_limit(600, 600)
version :profile do
process :crop
resize_to_fill(120, 120)
def full_filename (for_file = model.file)
"profile.png"
end
end
version :timeline do
process :crop
resize_to_fill(50, 50)
def full_filename (for_file = model.file)
"timeline.png"
end
end
version :navigation do
process :crop
resize_to_fill(20, 20)
def full_filename (for_file = model.file)
"navigation.png"
end
end
def crop
if model.crop_x.present?
resize_to_limit(600, 600)
manipulate! do |img|
x = model.crop_x.to_i
y = model.crop_y.to_i
w = model.crop_w.to_i
h = model.crop_h.to_i
img.crop!(x, y, w, h)
end
end
end
end
after_store在這種情況下似乎不起作用,因爲裁剪不會在上傳時發生。因此,大文件被存儲,然後刪除,然後我可以使用jCrop編輯它。 –
@RichCoy你可以將刪除邏輯移動到保存編輯圖像的'after_save'回調中 –
對不起,我有點困惑。那會進入上傳器還是控制器? –