gpt4 book ai didi

ruby-on-rails - 创建多个csv文件并使用rails在一个zip归档文件中全部下载

转载 作者:行者123 更新时间:2023-12-04 19:05:34 25 4
gpt4 key购买 nike

我正在寻找一种方法来创建多个csv文件,并将其作为一个zip存档下载到我的rails应用程序中的一个请求中。

要构建文件,我使用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-您还可以传递其他参数来指定要创建的文件的属性。

关于ruby-on-rails - 创建多个csv文件并使用rails在一个zip归档文件中全部下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25824432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com