Rails Combine Carrierwave загружает в Zip-файл для скачивания - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть несколько файлов, которые были загружены, и файлы сгруппированы в папке. У меня есть кнопка массовой загрузки, которая загружает все файлы в папке. Когда они нажмут кнопку загрузки, будет запущен этот метод.

  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 он извлечет файлы, и я смогу успешно открыть / отредактировать их. Однако при использовании внутреннего экстрактора zip в Windows XP / Vista / 7 выдается неопределенная ошибка 0x80004005 .

Несмотря на то, что я могу загружать и открывать файлы с помощью WinRAR или 7Zip, я не считаю это эффективным решением. Любая идея, как я могу изменить метод download_multiple, чтобы он позволял Windows открывать ZIP-файл без какого-либо программного обеспечения для сжатия, кроме того, что поставляется с Windows?

1 Ответ

0 голосов
/ 11 июля 2012

Последнее обновление gem исправило эту проблему.

...