重命名现有的CarrierWave文件

时间:2011-12-28 01:18:25

标签: ruby-on-rails carrierwave

如何使用CarrierWave重命名现有图像? (这个问题很接近但不完全相同:Renaming uploaded files with Carrierwave)例如,如果model.image.urlfoo-bar-jpg,我怎样才能将文件和相应的数据库字段重命名为foo-bar.jpg }?

model.image.recreate_versions!将创建新文件,但在数据库中它不会更改模型的图像字段。

3 个答案:

答案 0 :(得分:2)

Carrierwave的locomotive branch似乎已重命名支持 - 具体文件为here

转换文件类型时主要有file rename support,但没有重命名支持:

"This should help with situations where a file has multiple versions,
and at least one of the versions is of a different format than the master version."

答案 1 :(得分:1)

我使用了此处描述的技术:How to assign a remote file to Carrierwave?

这可能不是最佳方式,但它对我有用。我的远程文件恰好是旧文件名/路径。

首先,我更改了Carrierwave上传器以获得我想要的新文件名样式。然后我写了一个rake任务来迭代记录并更新这样的文件:

model.remote_image_url = old_image_url
model.save! 

这将再次上传现有文件,根据更新的Uploader设置名称/路径(并重新创建所有版本)。我还没有解决清理旧文件的问题,如果你的store_dir是相同的(我的更改也是如此),我不确定这将如何工作。

确保在完成整个表格之前对几条记录进行彻底测试,这很容易弄得一团糟。请注意,更改store_dir将破坏现有文件的所有查找。

答案 2 :(得分:0)

发现这一点,它似乎过时了,但也许可以帮助某人: https://github.com/stvkoch/carrierwave_single_store