直接下载xls文件而不通过Spreadsheet gem将其写入目录
我正在使用此Spreadsheet gem导出xls文件。
我的控制器中有以下代码:
def export @data = Data.all book = Spreadsheet::Workbook.new sheet = book.create_worksheet :name => "data" contruct_body(sheet, @data) book.write "data.xls" end
通过这种方式,我可以填写数据并将其保存在根目录中。
但我想下载它而不是保存它。 我怎么能修改代码,以便用户提示选择他的本地目录来保存文件? (如果不在服务器端保存副本,则更好)
请帮忙!
您可以将其发送到浏览器,而不必将其保存为本地文件,如下所示
spreadsheet = StringIO.new book.write spreadsheet send_data spreadsheet.string, :filename => "yourfile.xls", :type => "application/vnd.ms-excel"
你可以尝试这个代码
book.write "data.xls" send_file "/path/to/data.xls", :type => "application/vnd.ms-excel", :filename => "data.xls", :stream => false # and then delete the file File.delete("path/to/data.xls")
传递:stream => false
to send_file
将指示Rails在流式传输之前将整个文件复制到内存中,因此在send_file
之后立即使用File.delete
就可以了,因为send_file
立即返回而无需等待下载完成。 话虽如此,对于非常大的文件,您可能会看到一些内存瓶颈,具体取决于可用内存量。
HTH
案件发生在我身上。 我使用remote :: true的ajax请求导出excel文件,浏览器上没有任何显示,控制台上没有任何错误消息。 从表单中删除远程参数,效果很好。