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