2016-02-24 102 views
0

我正面臨着如何壓縮通過gem'axlsx_rails'生成的excel表格的問題。例如:通過gem axlsx rails生成的Zip Excel表格

class SampleController < ApplicationController::Base 

    def export 
    if params[:zip] 
     xxxx 
    else 
     render xlsx: 'export', filename: filename, disposition: 'attachment' 
    end 
    end 

end 

在上面的例子,現在最終用戶能夠下載Excel表格,但如果最終用戶請求Excel工作表中的zip文件,我們如何能做到這一點。由於'else'塊中的代碼,最終用戶可以下載Excel表格。如果用戶希望在下載之前將excelsheet壓縮,我必須做的事情。如果您需要更多信息,請告訴我。由於

回答

0

這是未經測試的代碼,但嘗試使用Zip::ZipOutputStream

def export 
    if params[:zip] 
    compressed_filestream = Zip::ZipOutputStream.write_buffer do |zos| 
     content = render_to_string xlsx: 'export', filename: filename 
     zos.put_next_entry(filename) 
     zos.print content 
    end 
    compressed_filestream.rewind 
    send_data compressed_filestream.read, filename: 'export.zip', type: 'application/zip' 
    else 
    render xlsx: 'export', filename: filename, disposition: 'attachment' 
    end 
end 

如果它不工作,在Github上創建一個問題,當我們得到它的工作,我們可以將其添加到文檔。

+0

謝謝諾埃爾。它適用於我,但我重構了一些代碼以適合我的應用程序 – Sheharose

+0

如果您得到AbstractController :: DoubleRenderError,請嘗試在'render_to_string'後面放置'self.response_body = nil'。這幫助了我。我正在使用Rails 4.2.5 – yivo