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

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

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

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

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

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

问候,

塞巴斯蒂安

这是一个可行的程序……

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

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

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

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

    send_file '/path/to.zip'

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

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

为我工作:

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