一段时间以来,我一直在使用 Carrierwave 进行文件上传。我没有尝试在上传文件时重命名它们。现在我想给每个文件一个随机的名称和一个与内容类型一致的文件扩展名。我阅读了 wiki 和其他网站,建议在上传器中,我可以:
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
然后在rails控制台中,我尝试在带有附件的模型上调用它。但是,我发现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。