You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CarrierWave上传器禁用缓存文件的自动删除功能?

禁用CarrierWave存储后缓存文件自动删除的方案

要实现存储文件后保留缓存文件,待执行特定操作后手动删除,可通过重写CarrierWave上传器的核心方法来实现,以下是两种可行方案:

方案一:全局禁用自动删除,手动触发删除

直接重写remove_cache!方法,取消默认的自动删除逻辑,同时新增手动删除的方法:

class FileUploader < CarrierWave::Uploader::Base
  def store_dir
    "store"
  end

  def cache_dir
    'tmp'
  end

  def size_range
    0..100.megabytes
  end

  # 重写方法,默认不执行缓存删除
  def remove_cache!
    # 留空以禁用自动删除
  end

  # 自定义手动删除缓存的方法
  def manual_remove_cache!
    super # 调用CarrierWave原生的缓存删除逻辑
  end
end

使用流程:

  1. 上传并存储文件后,缓存文件会保留在tmp目录中
  2. 完成你需要的特定操作(如文件解析、复制等)
  3. 调用uploader_instance.manual_remove_cache!手动删除缓存

方案二:按需开关自动删除

添加一个开关属性,灵活控制是否自动删除缓存:

class FileUploader < CarrierWave::Uploader::Base
  def store_dir
    "store"
  end

  def cache_dir
    'tmp'
  end

  def size_range
    0..100.megabytes
  end

  # 定义开关属性
  attr_accessor :skip_cache_removal

  # 根据开关决定是否执行默认删除逻辑
  def remove_cache!
    super unless skip_cache_removal
  end
end

使用流程:

# 初始化上传器并开启禁用自动删除
uploader = FileUploader.new
uploader.skip_cache_removal = true

# 存储文件
uploader.store!(your_file)

# 执行特定操作
# ...

# 手动删除缓存
uploader.skip_cache_removal = false
uploader.remove_cache!

内容的提问来源于stack exchange,提问作者leonchik12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:32:18