ruby-on-rails – 使用Tempfile在rails中创建一个zip文件

我想在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进行拉链?如果是的话,这里有什么问题?

解决方法

在我的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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...