如何在Ruby on Rails中使用Tempfile生成一个zip文件?

2026-04-10 07:131阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计262个文字,预计阅读时间需要2分钟。

如何在Ruby on Rails中使用Tempfile生成一个zip文件?

我想在Rails中创建一个临时的.zip文件。为了创建zip文件,我使用了`rubyzip` gem。目前我的做法是:

ruby+zfname=Tempfile.new(['somename', '.zip'], Rails.root.to_s + '/tmp/')Zip::ZipFile.open(zfname.path, Zip::ZipFile::CREATE) do |zipfi| # ...end

我想在rails中创建一个临时的.zip.为了创建zip文件我使用 rubyzip gem.

目前我这样做:

zfname = Tempfile.new(['somename','.zip'], Rails.root.to_s + '/tmp/') Zip::ZipFile.open(zfname.path, Zip::ZipFile::CREATE) do |zipfile| zipfile.add(file, basepath + file) end

这会产生以下错误:

Zip::ZipError: Zip end of central directory signature not found

是否可以使用Tempfile进行拉链?如果是的话,这里有什么问题?

如何在Ruby on Rails中使用Tempfile生成一个zip文件?

在我的rails应用程序中,当我需要向用户发送zip文件时,我只是将它们存储在缓冲区中并在控制器中使用“发送数据”方法.
我最初尝试使用’Tempfile’,但它有一个额外的任务,删除zip文件后发送给用户这是一个痛苦.
这是你要找的东西吗?

Zip::OutputStream.write_buffer do |stream| file_paths.each_with_index do |file_path, index| # rename the pdf stream.put_next_entry("#{name}-#{index + 1}.pdf") # add pdf to zip stream.write IO.read(file_path) end end

本文共计262个文字,预计阅读时间需要2分钟。

如何在Ruby on Rails中使用Tempfile生成一个zip文件?

我想在Rails中创建一个临时的.zip文件。为了创建zip文件,我使用了`rubyzip` gem。目前我的做法是:

ruby+zfname=Tempfile.new(['somename', '.zip'], Rails.root.to_s + '/tmp/')Zip::ZipFile.open(zfname.path, Zip::ZipFile::CREATE) do |zipfi| # ...end

我想在rails中创建一个临时的.zip.为了创建zip文件我使用 rubyzip gem.

目前我这样做:

zfname = Tempfile.new(['somename','.zip'], Rails.root.to_s + '/tmp/') Zip::ZipFile.open(zfname.path, Zip::ZipFile::CREATE) do |zipfile| zipfile.add(file, basepath + file) end

这会产生以下错误:

Zip::ZipError: Zip end of central directory signature not found

是否可以使用Tempfile进行拉链?如果是的话,这里有什么问题?

如何在Ruby on Rails中使用Tempfile生成一个zip文件?

在我的rails应用程序中,当我需要向用户发送zip文件时,我只是将它们存储在缓冲区中并在控制器中使用“发送数据”方法.
我最初尝试使用’Tempfile’,但它有一个额外的任务,删除zip文件后发送给用户这是一个痛苦.
这是你要找的东西吗?

Zip::OutputStream.write_buffer do |stream| file_paths.each_with_index do |file_path, index| # rename the pdf stream.put_next_entry("#{name}-#{index + 1}.pdf") # add pdf to zip stream.write IO.read(file_path) end end