Html rails:emulate";将页面另存为";行为

Html rails:emulate";将页面另存为";行为,html,ruby-on-rails,download,types,Html,Ruby On Rails,Download,Types,对于rails项目,我需要向用户提供可下载的HTML版本的统计页面。我创建了一个控制器操作,该操作将如下设置标题,然后呈现并返回我的普通html页面: headers["Content-Type"] ||= 'application/x-unknown' headers["Content-Disposition"] = "attachment; filename=\"#{filename}\"" 这将使浏览器弹出“下载”对话框,而不是立即呈现所需的html。但是,这只给了我一个空白的HTML

对于rails项目,我需要向用户提供可下载的HTML版本的统计页面。我创建了一个控制器操作,该操作将如下设置标题,然后呈现并返回我的普通html页面:

headers["Content-Type"] ||= 'application/x-unknown'
headers["Content-Disposition"] = "attachment; filename=\"#{filename}\"" 
这将使浏览器弹出“下载”对话框,而不是立即呈现所需的html。但是,这只给了我一个空白的HTML,没有任何图像或CSS嵌入。 我想做的基本上与浏览器在点击“另存页面为”菜单项时所做的相同(甚至可能将图像、css和html文件压缩成压缩文件并返回)

正确的方法是什么?是否有方法调用带有标题设置的浏览器“另存页面为”对话框

问候,


Sebastian能否尝试将HTTP内容类型设置为“应用程序/八位字节流”,并告诉我这是否有帮助?

以下是一个可能有效的过程

  • 将要下载的内容(呈现的HTML、图像、CSS等)组装到文件系统上的staging dir中

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

  • 使用gem将其压缩到*.Zip存档中

  • 使用Rails的方法打开下载对话框

    send_file'/path/to.zip'

  • 删除staging dir和zip存档。避免在用户下载时删除它。也许设置一个cron任务,每天清理一次

  • 为我工作:

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

    不,这与“application/x-unknown”没有什么不同