直接下载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文件,浏览器上没有任何显示,控制台上没有任何错误消息。 从表单中删除远程参数,效果很好。