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

标签 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/etc. 实际读取数据所需的时间。)为了解决这个问题,我一直在 open 之后使用 sleep 60

我的问题是:有没有比使用 tmpfiles 更好的方式向用户显示 html 文件而不保存它?如果没有,有没有办法等待 safari/chrome/等。在不使用 sleep 调用的情况下读取文件?

最佳答案

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

类似这样的东西甚至在 Windows 上也能工作:

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

所以试试这个:

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

关于Ruby:在内存中显示 HTML 文件而不将其保存到磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7933437/

相关文章:

swift - NSCollectionView 在创建项目时崩溃

java - MacOS Jenkins : Locating JRE and importing self-signed certificate

javascript - Windows 通用应用程序 - Javascript - 文件 IO - 无响应

ruby - 旋转二维数组的一部分

HTML 删除文本之间所需的空格

ruby - Sequel 数据集的 bool 组合

macos - ~/Library/Caches/<my-app-bundle>/Cache.db 中存储了什么?

java - 使用 java,如何获取 solaris zfs 文件系统上的可用空间量?

c# - 使用 C# 在 Windows CE 5.0 中创建文件

ruby - 如何在 rspec 测试中包含 lib 目录