Zip Excel sheet 通过 gem axlsx rails 生成
Zip Excel sheet generated through gem axlsx rails
我面临如何压缩通过 gem 'axlsx_rails' 生成的 excel sheet 的问题。例如:
class SampleController < ApplicationController::Base
def export
if params[:zip]
xxxx
else
render xlsx: 'export', filename: filename, disposition: 'attachment'
end
end
end
在上面的示例中,现在最终用户可以下载 excel sheet,但如果最终用户请求 excel sheet 的 zip 文件,我们该怎么做。由于 'else' 块中的代码,最终用户能够下载 excel sheet。如果用户希望 excelsheet 在下载前被压缩,我必须做什么。如果您需要任何进一步的信息,请告诉我。谢谢
这是未经测试的代码,但请尝试使用 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 上创建一个问题,在我们让它起作用后,我们可以将它添加到文档中。
我面临如何压缩通过 gem 'axlsx_rails' 生成的 excel sheet 的问题。例如:
class SampleController < ApplicationController::Base
def export
if params[:zip]
xxxx
else
render xlsx: 'export', filename: filename, disposition: 'attachment'
end
end
end
在上面的示例中,现在最终用户可以下载 excel sheet,但如果最终用户请求 excel sheet 的 zip 文件,我们该怎么做。由于 'else' 块中的代码,最终用户能够下载 excel sheet。如果用户希望 excelsheet 在下载前被压缩,我必须做什么。如果您需要任何进一步的信息,请告诉我。谢谢
这是未经测试的代码,但请尝试使用 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 上创建一个问题,在我们让它起作用后,我们可以将它添加到文档中。