我在一個Rails 4項目中使用carrierwave,用於開發和測試的文件存儲以及用於生產的霧存儲(用於存儲在Amazon S3上)。Carrierwave:文件哈希和模型ID在文件名/ store_dir
我想保存這樣的路徑,我的文件:
/model_class_name/part_of_hash/another_part_of_hash/hash-model_id.file_extension
(例如:/images/12/34/1234567-89.png
,其中1234567是文件內容的SHA1哈希和89是相關聯的圖像模型中的ID數據庫)。
我試了一下,到目前爲止是這樣的:
class MyUploader < CarrierWave::Uploader::Base
def store_dir
"#{model.class.name.underscore}/#{sha1_for(file)[0..1]}/#{sha1_for(file)[2..3]}"
end
def filename
"#{sha1_for(file)}-#{model.id}.#{file.extension}" if original_file
end
private
def sha1_for file
Digest::SHA1.hexdigest file.read
end
end
這不起作用,因爲:
model.id
時不可filename
叫file
並不總是可用時store_dir
是叫做
所以,來我的問題:
- 是有可能使用模型IDS /內
filename
屬性? This link表示不應該這樣做;有沒有辦法解決它? - 是否可以使用
store_dir
內的文件內容/屬性?我沒有找到有關這方面的文件,但我迄今的經驗說「不」(見上文)。 - 你將如何實現文件/目錄命名,以儘可能接近我在開始概述的內容?
我接受了你的回答,因爲它回答了我的問題中的每一點,謝謝。如果您對我的最終解決方案感興趣,請查看我自己的答案,詳細說明它... – severin