2011-10-28 57 views
2

我在內存中有一個html報告,並希望將其顯示給用戶而不將報告保存到磁盤。我現在不必擔心窗口,所以我一直在用ruby製作tmp文件,並使用系統open來顯示文件。Ruby:顯示內存中的HTML文件而不將其保存到磁盤

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

雖然這會奏效,它不會因爲臨時文件從存儲器之前Safari /鉻實際上可以讀取數據(一旦命令系統返回清除open回報不考慮Safari瀏覽器/ Chrome瀏覽器/實際讀取數據所需的時間量等)。爲了解決這個問題,我一直在open之後使用sleep 60

我的問題是這樣的:有沒有更好的方式來顯示一個HTML文件給用戶而不保存它比使用tmpfiles?如果沒有,有沒有辦法等待safari/chrome /等。讀取文件時不使用sleep調用?

+0

爲什麼你想避免臨時文件?我能想到的唯一選擇是製作一個GUI應用程序並嵌入一個HTML渲染組件,這對於顯示報告來說是很多工作。 – millimoose

+0

不避免臨時文件,他們只是有限制,要求其他解決方案或解決臨時文件的限制。編寫一個GUI將超架構一個解決方案。 – Schneems

+0

哦,Ruby的臨時文件不能設置爲*不自動刪除?奇。您可以嘗試使用'system'mktemp -t someprefix''來獲取臨時文件名,或者尋找一個到'mkstemp'的接口。 – millimoose

回答

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}'" 
+0

'firefox:command not found'如果我嘗試'system'打開/Applications/Firefox.app'data:text/html; base64,#{report_text}'「'然後告訴我文件:''data: text/html; base64,#{report_text}''不存在。 – Schneems

+0

我不使用Mac,只是Linux,它應該是一樣的。這在irb中可以工作:''system/usr/bin/firefox'data:image/png; base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4 // 8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg =='「'所以試試'/ Applications/Firefox.app'而不是'/ USR /斌/ firefox' – Petr

相關問題