加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用rails创建多个csv文件并在一个zip-archive

发布时间:2020-12-16 21:02:36 所属栏目:百科 来源:网络整理
导读:我正在寻找一种方法来创建多个csv文件,并在我的rails应用程序中的一个请求中将它们下载为一个zip存档. 要构建存档,我使用rubyzip gem – 只下载rails内置函数send_data.我遇到的问题是rubyzip的add-function需要一个路径名来加载文件.但是没有路径,因为我的c
我正在寻找一种方法来创建多个csv文件,并在我的rails应用程序中的一个请求中将它们下载为一个zip存档.

要构建存档,我使用rubyzip gem – 只下载rails内置函数send_data.我遇到的问题是rubyzip的add-function需要一个路径名来加载文件.但是没有路径,因为我的csv文件是在同一个请求中创建的.

一些代码:

# controller action to download zip
def download_zip
  zip = @company.download_all
  send_data zip,filename: "abc.zip",type: 'application/zip'
end

# method to create zip
def download_all
  Zip::File.open('def.zip',Zip::File::CREATE) do |zipfile|
    self.users.each do |user|
      #some magic to combine zipfile.add() and user.to_csv
    end
  end
end

# method to create csv
def to_csv
  CSV.generate do |csv|
    #build awesome csv
  end
end

有没有办法临时保存我的csv文件在某个目录,我可以将路径名传递给zipfile.add()?

好周末大家和快乐的编码!

解决方法

您可以将CSV输出写入临时文件并在其上调用zipfile.add(),但有一个更清晰的解决方案:
zipfile.get_output_stream("#{user.name}.csv") { |f| f.puts(user.to_csv) }

有关get_output_stream的更多详细信息,请参阅http://rdoc.info/github/rubyzip/rubyzip/master/Zip/File#get_output_stream-instance_method – 您还可以传递其他参数以指定要创建的文件的属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读