我一直在使用Carrierwave進行文件上傳。我沒有嘗試重新上傳文件。現在我想給每個文件一個隨機的名稱和一個與內容類型一致的文件擴展名。我讀了維基和其他網站,並建議在上傳,我可以:如何重命名所有現有的carrierwave上傳的文件?
def filename
"#{secure_token}.#{file.extension}" if original_filename.present?
end
private
def secure_token
#implement the secure token
end
它能正常工作後這些添加到上傳上傳文件。但是,我收到了許多在此更改之前上傳的文件。我想知道是否有人能告訴我如何遷移舊文件。
我嘗試添加的方法給上傳:
def rename_file!
model.update_attribute mounted_as, "#{secure_token}.#{file.extension}"
recreate_versions!
end
然後在軌道控制檯,我試圖調用此與附件的模型。但是,我發現該模型的mounted_as
列從未得到更新,但在文件系統上,該文件的各個版本均使用新名稱創建。當我檢查模型的mounted_as
字段時,它沒有更新。日誌實際上表示該列已更新爲舊值。
如何獲取更新型號上的mounted_as
列?
另外,它好像舊名稱的舊文件仍在文件系統上。有沒有辦法刪除它們?我嘗試添加一行:
file.move_to File.join("#{File.dirname file.path}, "#{secure_token}.#{file.extension}")
在rename_file!
方法中。它重命名了這些文件,但未更新模型上的mounted_as
列。所以訪問它的URL導致了一個404.
我會在耙子任務中這樣做 – cgat