CarrierWave:允许逐个文件上传以及批量zip上传

时间:2015-11-10 19:21:17

标签: ruby-on-rails carrierwave

我使用CarrierWave上传和管理ActiveRecord模型上的资源。我已经定义了我自己的Uploader并将其安装到我的一个模型上的一堆属性中,如下所示:

class Theme < ActiveRecord::Base
  ...
  mount_uploader :masthead, ThemeResourceUploader
  mount_uploader :background, ThemeResourceUploader
  mount_uploader :footer, ThemeResourceUploader
  ...
end

从我的Rails控制器中的params创建新主题时,这可以正常工作,但除了允许用户一次上传一个图像之外,我还想让他们上传包含所有这些图像的zip文件。然后使用此zip来构建主题。

为了尝试完成此操作,我为zip文件和控制器方法创建了一个新的上传器,该方法使用Rubyzip在内存中提取上传的zip,然后尝试将结果流分配给我的ActiveRecord模型的属性。 / p>

def import
  require 'zip'

  @theme = Theme.new

  zip_upload = params.require(:theme).require(:zip)
  uploader = ThemeImportUploader.new
  uploader.cache!(zip_upload)

  Zip::File.open(uploader.file.path) do |zip_file|
    @theme.masthead = zip_file.get_input_stream('masthead.png')
    @theme.background = zip_file.get_input_stream('background.png')
    @theme.footer = zip_file.get_input_stream('footer.png')
  end

  @theme.save
end

不幸的是,这不起作用。我没有收到任何错误或失败,但主题会保存为资源的空值,并且文件不会在我的上传文件夹中创建。

我相信我可以通过将zip解压缩到临时文件然后将这些文件读入CarrierWave属性来实现这一点,但这似乎是一种解决问题的方法。

如何在内存中上传和提取zip并将其内容分配给我的CarrierWave增强型号?

0 个答案:

没有答案