如何使用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
使用流程:
- 上传并存储文件后,缓存文件会保留在
tmp目录中 - 完成你需要的特定操作(如文件解析、复制等)
- 调用
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
相关产品推荐
相关产品推荐

