Rails 3.1のファイルアップロードにCarrierWaveを使用しています。サーバースペースを節約する方法を探しています。アップロードされる写真の多くは20MB以上ですので、1024×1024まで処理した後、元の写真を削除したいと思います。アップローダークラスでこれを行う簡単な方法はありますか?バージョンの処理後にcarrierwaveに元のファイルを保存させないようにするにはどうすればよいですか?
おかげで、 --mark
Rails 3.1のファイルアップロードにCarrierWaveを使用しています。サーバースペースを節約する方法を探しています。アップロードされる写真の多くは20MB以上ですので、1024×1024まで処理した後、元の写真を削除したいと思います。アップローダークラスでこれを行う簡単な方法はありますか?バージョンの処理後にcarrierwaveに元のファイルを保存させないようにするにはどうすればよいですか?
おかげで、 --mark
あなたはあなたの中にafter_saveコールバックを定義することができ、写真をモデル化し、削除します。..
私はあなたがそれをカスタマイズしている場合、このようなモデルが、何かが動作する可能性を知らない:
class User << ActiveRecord::Base
after_create :convert_file
after_create :delete_original_file
def convert_file
# do the things you have to do
end
def delete_original_file
File.delete self.original_file_path if File.exists? self.original_file_path
end
end
あなたはいくつかの実用的な例を提供できますか? –
例を追加 – Lichtamberg
あなたの功績はありましたか?はいの場合は、正しい答えをマークするといいと思います。 – Lichtamberg
class FileUploader < CarrierWave::Uploader::Base
after :store, :delete_original_file
def delete_original_file(new_file)
File.delete path if version_name.blank?
end
include CarrierWave::RMagick
storage :file
.
. # other configurations
end
私は2つのバージョンを持っていたと私は、元
01を必要としないしなかったことを実現ノーマルと今、元は私が必要とするサイズで保存されます。このprocess :resize_to_limit => [300, 300]
を追加し、私は、サーバー
上の第三未使用のイメージを持っていない:ので、代わりに
version :thumb do
process :resize_to_limit => [50, 50]
end
version :normal do
process :resize_to_limit => [300,300]
end
を有していると私は削除しました
素晴らしいですが、これはどのバージョンブロックの外でもプロセスを実行するのに最適なソリューションだと思うので、オリジナルのバージョンを保存しないようにしてください。ありがとう – FireDragon
'version'ブロックで起こるようにアップロードされたファイルのファイル名に' 'normal_" 'を含めたければ、ベースアップローダにバージョン名を明示的に割り当てることができます'version_names <<:medium'です。 –
みんな! 選択した解決策は私のためには機能しません。 私の解決策:
after :store, :remove_original_file
def remove_original_file(p)
if self.version_name.nil?
self.file.delete if self.file.exists?
end
end
ありがとう、あなたはクッキーに値する! –
それは少しハックですが、パフォーマンス上の利点
my_uploader.send :store_versions!, open(my_file)
はあなたのための私の解決策の仕事をしたのか? – Lichtamberg