代码之家  ›  专栏  ›  技术社区  ›  PeterWong

直接下载xls文件而不通过电子表格gem将其写入目录

  •  23
  • PeterWong  · 技术社区  · 14 年前

    Spreadsheet

    我的控制器中有以下代码:

    def export
      @data = Data.all
    
      book = Spreadsheet::Workbook.new
      sheet = book.create_worksheet :name => "data"
    
      contruct_body(sheet, @data)
    
      book.write "data.xls"
    end
    

    这样,我可以填写数据并将其保存在根目录中。

    但我想下载而不是保存它。如何修改代码以便用户提示选择本地目录以保存文件?(最好不要在服务器端保存副本)

    请帮忙!

    3 回复  |  直到 14 年前
        1
  •  50
  •   DanSingerman    14 年前

    您可以将其发送到浏览器,而不必将其保存为本地文件,如下所示

    spreadsheet = StringIO.new 
    book.write spreadsheet 
    send_data spreadsheet.string, :filename => "yourfile.xls", :type =>  "application/vnd.ms-excel"
    
        2
  •  2
  •   Anand Shah    14 年前

    你可以试试这个密码

    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 send_file 将指示Rails在流式处理之前将整个文件复制到内存中,因此使用 File.delete 紧接着 发送文件 发送文件 立即返回,而不等待下载完成。尽管如此,对于非常大的文件,您可能会看到一些内存瓶颈,这取决于可用的内存量。

    高温高压

        3
  •  0
  •   aaron chan    11 年前

    我使用remote::true的ajax请求来导出excel文件,浏览器上没有显示任何错误消息。 从表单中删除远程参数,效果很好。