我使用carrierwave和fog gems成功将图像文件上传到S3,但我不知道如何删除它。
我的意图如下。用户将图像文件上载到用户的“sumnail”属性。用户想要更改图像。系统将删除旧文件,然后上传新图像。我怎么能做到这一点?
我的上传者名字是Imgs。这是我的代码:
应用/上传/ imgs_uploader.rb
# encoding: utf-8
class ImgsUploader < CarrierWave::Uploader::Base
# Choose what kind of storage to use for this uploader:
# storage :file
storage :fog
def store_dir
"uploads/"
end
def extension_white_list
%w(jpg jpeg gif png)
end
def filename
Time.now.to_i.to_s + [*('a'..'z')].sample(8).join + "." + file.extension if original_filename
end
end
应用/控制器/ home_controller.rb
def sumnailUpload
u = User.find(current_user.id)
unless u.sumnail.empty?
# I think remove old image code here.
end
file = params[:sumnail]
uploader = ImgsUploader.new
uploader.store!(file)
u.sumnail = uploader.url
u.save
redirect_to "/home/index"
end
配置/ initailzers / aws.rb
CarrierWave.configure do |config|
#config.fog_provider = 'fog/aws' # required
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV['ACCESS_KEY_ID'],
aws_secret_access_key: ENV['SECRET_ACCESS_KEY'],
region: 'ap-northeast-2',
endpoint: 'https://s3.ap-northeast-2.amazonaws.com'
}
config.fog_directory = 'filefile'
config.fog_public = true
config.fog_attributes = {}
end
=============================================== ==================
应用/模型/ user.rb 需要'carrierwave / orm / activerecord' class User&lt;的ActiveRecord :: Base的 mount_uploader:avatar,AvatarUploader ... 端
应用/上传/ imgs_uploader.rb class ImgsUploader&lt; CarrierWave ::上传::基
storage :fog
...
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
...
def filename
# "something.jpg" if original_filename
"u_#{model.id}." + file.extension if original_filename
end
end
然后,我就这样使用了。
one_user.avatar.store!( “”)
答案 0 :(得分:0)
答案 1 :(得分:0)
您应该能够在用户实例上调用User#remove_sumnail!
,然后保存。
user = User.find(params[:id])
user.remove_sumnail!
user.save
请参阅此处的文档:
在这里:
https://github.com/carrierwaveuploader/carrierwave#removing-uploaded-files