Rails将Carrierwave上传组合成可下载的Zip文件

时间:2012-02-12 21:52:42

标签: windows-7 ruby-on-rails-3.1 compression download carrierwave

我有几个上传的文件,文件分组在一个文件夹中。我有一个大量下载按钮,可以下载该文件夹中的所有文件。当他们点击下载按钮时,它将运行此方法。

  def download_multiple
    @odocument = Odocument.find(params[:id])
    @files = Redocument.find(:all, :conditions => {:odocument_id => @odocument.id})
    t = Tempfile.new('tmp-zip-' + request.remote_ip)
    Zip::ZipOutputStream.open(t.path) do |zos|
      @files.each do |file|
        zos.put_next_entry(File.basename(file.redocument.url))
        zos.print IO.read(file.redocument.url)
      end
    end
    filename = @odocument.document_name + ".zip"
    t.close    

    send_file t.path, :type => "application/zip", :filename => filename     
  end

这将下载并创建ZIP文件,当使用WinRAR或7Zip时,它将提取文件,我可以成功打开/编辑它们。但是,当使用Windows XP / Vista / 7内部zip提取器时,它将生成未指定的错误0x80004005

尽管能够使用WinRAR或7Zip下载和打开文件,但我并不认为这是一种有效的解决方案。知道如何更改download_multiple方法,以便Windows可以在没有任何压缩软件的情况下打开ZIP文件吗?

1 个答案:

答案 0 :(得分:0)

最近的宝石更新解决了这个问题。