将活动存储附件下载到光盘

时间:2018-05-25 12:49:51

标签: ruby-on-rails rails-activestorage

The guide说我可以将附件保存到光盘上,就像这样运行一个进程:

message.video.open do |file|
  system '/path/to/virus/scanner', file.path
  # ...
end

我的模型的附件定义为:

has_one_attached :zip

然后在我定义的模型中:

def process_zip      
  zip.open do |file|
    # process the zip file
  end
end

但是我收到了错误:

private method `open' called
zip.open调用上的

如何在本地保存zip以进行处理?

2 个答案:

答案 0 :(得分:5)

作为Rails 5.2的替代方案,您可以这样做:

def process_zip      
   # Download the zip file in temp dir
   zip_path = "#{Dir.tmpdir}/#{zip.filename}"
   File.open(zip_path, 'wb') do |file|
       file.write(zip.download)
   end   

   Zip::File.open(zip_path) do |zip_file|  
       # process the zip file
       # ...
       puts "processing file #{zip_file}"
   end
end

答案 1 :(得分:1)

这是一个边缘指南(注意URL中的edgeguides.rubyonrails.org);它适用于GitHub上rails/rails存储库的主分支。主要的最新更改尚未包含在已发布的Rails版本中。

您可能正在使用Rails 5.2。使用边缘Rails来利用ActiveStorage::Blob#open

gem "rails", github: "rails/rails"