我正在尝试在我的 S3 存储桶中移动文件,CarrierWave
以重新组织文件夹结构。
我来到一个现有的 Rails 应用程序,其中一个类的所有图像都被上传到一个名为/uploads
. 这会导致问题,如果两个用户上传具有相同文件名的不同图像,第二个图像会覆盖第一个图像。为了解决这个问题,我想根据ActiveRecord
对象实例重新组织文件夹以将每个图像放在自己的目录中。我们CarrierWave
用于管理文件上传。
旧的上传程序代码具有以下方法:
def store_dir
"uploads"
end
我修改了方法以反映我的新文件存储方案:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
这对新图像非常有用,但会破坏旧图像的 url。当我更改模型时,现有图像会立即报告其 URL 位于新文件夹中,而图像文件仍存储在/uploads
.
> object.logo.store_dir
=> "uploads/object/logo/133"
这是不正确的。该对象应在 中报告其徽标/uploads
。
我的解决方案是编写一个脚本来移动图像文件,但我没有在 CarrierWave 中找到正确的方法来移动文件。我的脚本看起来像这样:
MyClass.all.each |image|
filename = file.name #This method exists in my uploader, returns the file name
#Move the file from "/uploads" to "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
我应该在我的脚本的第三行中做什么来将文件移动到新位置?