У меня есть приложение rails, в памяти которого в контроллере есть файл png, сгенерированный spark_pr .
@pngfile << Spark.plot( [47, 43, 24, 47, 16, 28, 38, 57, 50, 76, 42, 20, 98, 34, 53, 1, 55, 74, 63, 38, 31, 98, 89], :has_min => true, :has_max => true, 'has_last' => 'true', 'height' => '40', :step => 10, :normalize => 'logarithmic' )
@user=User.all.first
Я хотел бы отобразить этот png-файл в моем представлении, который является app / views / users / show.html.erb, и в нем есть стандартный материал, сгенерированный генератором скаффолдов Rails, где он отображает различные атрибуты @user.
Как я могу отобразить этот файл в памяти (@pngfile) в моем представлении? Я не хочу сохранять файл и даже не хочу предоставлять временный URL для этого файла. Я видел, как это делается на HTML-страницах с встроенными значками, отображаемыми из двоичного двоичного объекта, поэтому я знаю, что это возможно. Но я не мог понять магические заклинания с помощниками вида Rails, которые делают это возможным.
----------- РЕДАКТИРОВАТЬ: Дополнительная информация -------------------------
Этот сайт предоставляет дополнительную информацию о том, как вставлять URL-адреса. Код для значка папки выглядит следующим образом:
<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcpp
V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7"
width="16" height="14" alt="embedded folder icon">
Я включил этот точный код в мой взгляд, и он работал для Chrome, Firefox и IE9.
Так что я попытался сделать это с моим искровым заговором.
В моем контроллере Rails я сделал это:
@pngfile = Base64.encode64 Spark.plot( [47, 43, 24, 47, 16, 28, 38, 57, 50, 76, 42, 20, 98, 34, 53, 1, 55, 74, 63, 38, 31, 98, 89], :has_min => true, :has_max => true, 'has_last' => 'true', 'height' => '40', :step => 10, :normalize => 'logarithmic' )
На мой взгляд, я попробовал несколько разных трюков
<%=image_tag "data:image/png;base64,"+@pngfile %>
<%=image_tag "data://image/png;base64,"+@pngfile %>
<img src=<%="data:image/png;base64,"+@pngfile %> ></img>
<img src=<%=raw("data:image/png;base64,"+@pngfile) %> ></img>
Все они потерпели неудачу, кроме второго, и он работал в Chrome и Firefox, но не в IE9.
Первый должен был сработать, но код помощника image_tag по умолчанию добавляет «/ images /» к моему URL, даже если это непосредственный URL данных. Я знаю это, потому что я пытался просмотреть изображение на другой вкладке, и это не удалось. Но когда я удалил часть "/ images /", все заработало нормально.
Я понятия не имею, почему второй работал. Я просто попробовал это по прихоти.
Третий не удался, потому что казалось, что части строки были разбиты из-за специальных символов. Я попытался использовать необработанную строку в четвертой, но она тоже не сработала.
На данный момент я в тупике. Пытаюсь ли я сделать monkey-patch для image_tag, чтобы он не добавлял данные для данных: URL для встраиваемых изображений, или я делаю что-то необычное со строкой, чтобы она правильно отображалась, как в примерах 3 или 4?