ruby 是否可以禁用删除缓存文件使用载波上传?

dsekswqp  于 12个月前  发布在  Ruby
关注(0)|答案(4)|浏览(101)

我有一个CarrierWave上传,我需要禁用缓存文件保存到存储后删除.然后对该缓存文件执行某种操作并手动删除它。
我的上传者:

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

  def cache_dir
    'tmp'
  end

  def size_range
    0..100.megabytes
  end
end
bpzcxfmw

bpzcxfmw1#

您可以使用回调,在存储之前/之后。
在这里分享一个片段沿着一个链接-

after :store, :do_something_and_delete_manually

文件上传后触发回调。确保在使用回调函数后手动删除了该高速缓存。
查看此Carrierwave WIKI page以了解更多详细信息。

b91juud3

b91juud32#

您可以覆盖remove_cached_versions!方法
下面的代码将禁止删除上传文件的所有缓存版本

class FileUploader < CarrierWave::Uploader::Base

  def remove_cached_versions!
    # perform the intended operation here
  end

end

您可以在将缓存文件保存到存储区后禁用删除缓存文件。通过在上传器配置中设置keep_cached_files选项

# config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  config.keep_cached_files = true
end
gcxthw6b

gcxthw6b3#

我找到了我认为最适合我的选择我深入研究了gem的内部,注意到如果方法delete_tmp_file_after_storage返回true,则会删除该高速缓存。所以我只是重写了这个方法,仅此而已。

def delete_tmp_file_after_storage(config = nil)
    @delete_tmp_file_after_storage ||= config.present?
  end

默认情况下,我禁用了缓存删除,但如果需要,可以启用它。

q0qdq0h2

q0qdq0h24#

正如@leonchik12所指出的,这种行为是由@delete_tmp_file_after_storage示例变量控制的(代码似乎在这里)。虽然their answer可以工作,但覆盖此配置的更好方法是通过项目中应该有的标准配置块。
阅读gem的README,您可以看到这里有一个配置部分。不幸的是,文档并不清楚有哪些配置选项,但是查看代码,您可以看到所有可能的可配置选项in configuration.rb
查看选项,您会注意到在第22行上有一个delete_tmp_file_after_storage的配置。
所以把所有这些信息放在一起,你可以简单地做如下事情:

CarrierWave.configure do |config|
  config.delete_tmp_file_after_storage = false
  # you can add more configs below
end

您可以参考this文章的示例,其中使用了.configure。更多示例可通过gem's wiki找到

相关问题