2016-09-18 29 views
0

次のファイル名の構造でアップロードされた何千もの画像があります。carrierwave recreate_versionは元の保存されたファイル名とは異なるファイル名でサムを作成します

def filename 
"#{model.id}" + "-v#{timestamp}" + "-" + Category.find("#{model.category_id}").slug + "-" + CategoryItem.find("#{model.category_item_id}").slug + ".png" if original_filename.present? 
end 

def timestamp 
    var = :"@#{mounted_as}_timestamp" 
    model.instance_variable_get(var) or model.instance_variable_set(var, Time.now.to_i) 
end 

特定のページの読み込み時間を短縮するために、すべての画像のサムを作成する必要があります。私が実行したとき、私は今、アップローダファイルでセットアップ親指のバージョンを

# Create different versions of your uploaded files: 
    version :thumb do 
    process :resize_to_limit => [110, nil] 
    end 

けどをしました:CategoryItem.each {|item| item.image_value.recreate_versions! if item.image_value? }

は親指が作成されますが、親指の画像のファイル名は、元のファイルと同じではありませんファイル名の先頭に追加された「thumb_」を超えています。

saved filename: 1-v1474175808-shoes-runners.png 

thumb filename: thumb_1-v1472111618-shoes-runners.png (different timestamp) 

CategoryItem.find(1).image_value_url(:thumb): thumb_1-v1474175808-shoes-runners.png (original filename timestamp) 

したがって、image_tag CategoryItem.find(1).image_value_url(:thumb)を呼び出すと、存在しないファイルが検索されます。

recreate_versionsを実行して、サムファイル名を元の保存ファイル名と同じにすることはできますが、タイムスタンプを削除せずに「thumb_」を先頭に追加しますか?

更新:

私は今、私の問題は、私は、直接ファイル名File.basename(model.image_value.path).to_s、私はrecreate_versionsを実行すると、それはまだセーブを呼んでいるにもかかわらず、ということである。このhttps://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Customize-your-version-file-names

version :thumb do 
    process :resize_to_limit => [110, nil] 

    def full_filename(for_file = model.image_value.file) 
    'thumb_' + File.basename(model.image_value.path).to_s 
    end 
    end 

を見つけることから、次のを持っています元のファイル名を取得するのではなく、現在のタイムスタンプを持つファイルDB内のファイル名が変更されていて、新しいファイル名を取得していると思っていたのですが、期待どおりの状態を保っていると思いますので、DBから直接値を取得するのはなぜか分かりません。多分def full_filename(for_file = model.image_value.file)ありえないが、作業が、私は

version :thumb do 
    process :resize_to_limit => [110, nil] 

    def full_filename(for_file = model.image_value.file) 
    'thumb_' + "random-text" 
    end 
    end 

に変更した場合、

答えて

0

はに次のメソッドを追加し、そのコードを実行されているので、親指の画像が「thumb_randomテキスト」として保存されているけれどもまた

私はアップローダクラス

def timestamp 
    model.created_at 
end 

def filename 
    # custom name, or you can debug this first 
end 

version :thumb do 

    def full_filename(for_file = model) 
    'thumb_' + filename 
    end 

    def filename 
    # custom name, or you can debug this first 
    end 

end 
+0

元の画像のファイル名ではなく、現在のタイムスタンプで保存されます。私は 'thumb_' + model.image_value.to_s'を疲れましたが、URL全体を使用します – Rob

+0

ファイル名にタイムスタンプを含める理由を明確にすることはできますか? –

+0

timestampメソッドは、carrierwaveドキュメントから直接取得します。私はhttp://stackoverflow.com/questions/5132847/displaying-a-carrierwave-filename-in-the-viewを読んで「thumb_」+ File.basename(model.image_value.path).to_s'を追加しました。 'File.basename(model.image_value.path).to_s'はdbに保存された正確なファイル名を取得しますが、ファイル名の現在のタイムスタンプを保存し、dbからファイル名を直接コピーしません。 – Rob

関連する問題