【发布时间】:2025-12-11 18:15:02
【问题描述】:
我正在尝试使用 CarrierWave 在我的 S3 存储桶中移动文件以重新组织文件夹结构。
我来到一个现有的 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
我应该在我的脚本的第三行中做什么来将文件移动到新位置?
【问题讨论】:
-
您找到解决方案了吗?我有同样的问题。
-
这可能不适用于您,除非您使用雾,但这是我找到的最佳解决方案,我一直在努力寻找:*.com/questions/19038733/…
标签: ruby-on-rails-3 carrierwave reorganize