Ruby: отображать HTML-файл в памяти без сохранения на диск - PullRequest
2 голосов
/ 28 октября 2011

У меня есть html отчет в памяти, и я хочу показать его пользователю, не сохраняя отчет на диск. Сейчас мне не нужно беспокоиться об окнах, поэтому я делаю tmp-файлы с ruby ​​и использую систему 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? Если нет, то есть ли способ ждать Safari / Chrome / и т.д. прочитать файл без использования sleep вызова?

1 Ответ

1 голос
/ 28 октября 2011

Я не знаю, не превышаете ли вы какие-либо ограничения на длину командной строки или что-то еще, но есть 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}'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...