rails:模拟“将页面另存为”行为
对于rails项目,我需要为用户提供可下载的HTML版本的统计页面。 到目前为止我创建了一个控制器动作,它将按如下方式设置标题,然后渲染并返回我的vanilla html页面:
headers["Content-Type"] ||= 'application/x-unknown' headers["Content-Disposition"] = "attachment; filename=\"#{filename}\""
这将使浏览器弹出下载对话框,而不是立即渲染html,这是所希望的。 但是,这只给我空白的HTML,没有嵌入任何图像或CSS。
当我点击“将页面另存为”菜单项(甚至可能是zip文件中的zip图像,css和html文件并返回)时,我想要做的事情基本上与浏览器所做的相同。
这样做的正确方法是什么? 有没有办法通过标题设置调用浏览器“将页面另存为”对话框?
问候,
塞巴斯蒂安
这是一个可行的程序……
-
将要下载的内容(呈现的HTML,图像,CSS等)组装到文件系统上的暂存目录中。
- 给dir一个绝对唯一的名称(可能使用时间戳)。
- 您可以将呈现的HTML文件放在dir根目录中,将资产放在
assets
子目录中。 -
您需要修改HTML文件中的所有资产项URI,以指向
assets
目录中的项目而不是通常的位置。 例如:。
-
使用
rubyzip
gem将其压缩为* .zip存档。 -
使用Rails的
send_file
方法打开下载对话框。send_file '/path/to.zip'
-
删除暂存目录和zip存档。 在用户下载时避免删除它。 或许可以设立一个cron工作来清理一天。
您是否可以尝试将HTTP内容类型设置为“application / octet-stream”并告诉我这是否有帮助?
为我工作:
send_data(render, :filename => "filename.ext")