2016-09-18 58 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_」添加到前面?

更新:

我現在從找到這個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 

我的問題下面是,即使我打電話直接文件名File.basename(model.image_value.path).to_s,當我運行recreate_versions它仍然保存帶有當前時間戳的文件而不是抓取原始文件名。我想可能文件名在數據庫中發生了變化,它抓住了新的文件名,但它與預期保持一致,所以我不知道爲什麼它沒有從數據庫中獲取直接值,也沒有在名稱中創建隨機時間戳。

而且我雖然也許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',但它使用整個網址 – Rob

+0

你能澄清爲什麼你在文件名中包含時間戳嗎? –

+0

時間戳方法直接來自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'獲取保存在數據庫中的確切文件名,但它仍然給它保存文件名中的當前時間戳,並且不直接從數據庫中拷貝文件名。 – Rob

相關問題