我正面临着如何压缩通过gem'axlsx_rails'生成的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 :(得分:1)
这是未经测试的代码,但请尝试使用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上创建一个问题,在我们开始工作后,我们可以将其添加到文档中。