我正在使用 Carrierwave gem 上传文件。
我建立了一个系统,供用户将图像标记为不适当,并供管理员删除图像。据我所知,对图像调用 destroy 只会从表中删除路径名。
有没有办法让 Carrierwave 实际上删除文件本身?或者当我销毁图像路径时,rails 应该自动删除文件吗?
就像@mu_is_too_short所说,你可以使用File#delete。
这是一个代码片段,您可以将其用作助手,只需在 Rails 应用程序中进行一些调整即可。
def remove_file(file)
File.delete(file)
end
或者如果您只是将文件名存储在 file
中def remove_file(file)
File.delete("./path/to/#{file}")
end
不确定 CarrierWave 为此提供了什么,但您可以使用 Ruby 标准库中的
FileUtils
和 ActiveRecord 回调。
举个例子,
require 'FileUtils'
before_destroy :remove_hard_image
def remove_hard_image
FileUtils.rm(path_to_image)
end
旁注:此代码来自记忆。
如果想删除文件但不想指定完整的文件名,您可以使用以下命令。
也可用于删除具有特定扩展名的目录中的多个文件或所有文件...
file = Rails.root.join("tmp", "foo*")
或
file = Rails.root.join("tmp", ".pdf")
files = Dir.glob(file) #will build an array of the full filepath & filename(s)
files.each do |f|
File.delete(f)
end