rails:模拟“将页面另存为”行为

时间:2009-07-03 19:28:47

标签: html ruby-on-rails download types

对于rails项目我需要为用户提供可下载的HTML版本的统计页面。到目前为止我创建了一个控制器动作,它将按如下方式设置标题,然后渲染并返回我的vanilla html页面:

headers["Content-Type"] ||= 'application/x-unknown'
headers["Content-Disposition"] = "attachment; filename=\"#{filename}\"" 

这将使浏览器弹出下载对话框而不是立即呈现html,这是所希望的。但是,这只会给我一个没有任何图像或嵌入css的空白HTML。

我想做的事情与浏览器点击“将页面另存为”菜单项(甚至可能是zip文件中的zip图像,css和html文件并返回)相同

这样做的正确方法是什么?有没有办法通过标题设置调用浏览器“将页面另存为”对话框?

此致

塞巴斯蒂安

3 个答案:

答案 0 :(得分:1)

这是一个可行的程序......

  1. 将要下载的内容 - 呈现的HTML,图像,CSS等 - 组装到文件系统的暂存目录中。

    • 给dir一个绝对唯一的名称(可能使用时间戳)。
    • 您可以将呈现的HTML文件放在目录根目录中,将资产放在assets子目录中。
    • 您需要修改HTML文件中的所有资产项URI,以指向assets目录中的项目,而不是通常的位置。例如:

      <img src='assets/my_img.jpg'>

  2. 使用rubyzip gem将其压缩为* .zip存档。

  3. 使用Rails的send_file方法打开下载对话框。

    send_file '/path/to.zip'

  4. 删除暂存目录和zip存档。在用户下载时避免删除它。或许可以设立一个cron工作来清理一天。

答案 1 :(得分:0)

您是否可以尝试将HTTP内容类型设置为“application / octet-stream”并告诉我这是否有帮助?

答案 2 :(得分:0)

为我工作:

send_data(render, :filename => "filename.ext")