Ruby:在内存中显示HTML文件而不将其保存到磁盘

时间:2011-10-28 18:41:33

标签: ruby macos file-io

我在内存中有一个html报告,想要将其显示给用户而不将报告保存到磁盘。我现在不必担心Windows,所以我一直用ruby制作tmp文件并使用系统open来显示文件。

report_file = Tempfile.new([report.name, report.extension])
report_file.write(report.text)
system "open #{report_file.path}"

虽然这似乎有效,但是因为在safari / chrome实际上可以读取数据之前从临时文件中清除了临时文件(系统在命令open返回时返回,但没有考虑到safari / chrome /等实际读取数据所需的时间。)为了解决我在sleep 60之后使用open的问题。

我的问题是:有没有更好的方法向用户显示html文件而不保存它而不是使用tmpfiles?如果没有,有办法等待野生动物园/铬/等。在不使用sleep电话的情况下阅读文件?

1 个答案:

答案 0 :(得分:1)

我不知道你是否没有达到某些命令行长度限制,但有http://en.wikipedia.org/wiki/Data:_URI_scheme

这样的东西甚至可以在Windows上运行:

firefox.exe "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="

所以试试这个:

require "base64"
report_text = Base64.encode64(report.text)
system "firefox 'data:text/html;base64,#{report_text}'"