2011-08-25 5 views
3

나는 컨트롤러에 메모리에 png 파일이 있으며 spark_pr에 의해 생성 된 레일 앱이 있습니다.Rails3 :보기에서 메모리 내 이미지 렌더링

@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 

나는 응용 프로그램/뷰/사용자/show.html.erb 내보기에서이 PNG 파일을 렌더링하고 싶은, 그리고 그것은 다양한 속성을 표시하는 레일 발판 생성기에 의해 생성 된 표준 물건을 가지고 @user.

내보기에서이 메모리 내 파일 (@pngfile)을 어떻게 렌더링 할 수 있습니까? 파일을 저장하고 싶지 않으며 해당 파일의 임시 URL을 제공하고 싶지도 않습니다. 나는 바이너리 BLOB에서 렌더링 된 인라인 아이콘이있는 HTML 페이지에서이 작업을 수행 한 것을 보았습니다. 그러나 레일스 뷰 헬퍼를 사용하면 이런 일이 가능하다는 마법의 주문을 이해할 수 없었습니다.

은 ----------- 편집 : 추가 정보 -------------------------

This site 준다 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에서 작동했습니다.

그래서 스파크 음모로이 작업을 시도했습니다. 내 레일 컨트롤러에서

, 나는이 한 : 나는 그들은 모두 두 번째를 제외하고 실패한 몇 가지 트릭

<%=image_tag "data:image/png;base64,"[email protected] %> 

<%=image_tag "data://image/png;base64,"[email protected] %> 

<img src=<%="data:image/png;base64,"[email protected] %> ></img> 

<img src=<%=raw("data:image/png;base64,"[email protected]) %> ></img> 

을 시도 내 관점에서

@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') 

을하고 크롬에서 근무하고 IE9는 아니지만 Firefox. 첫 번째 코드는 효과가 있었지만 image_tag 도우미의 코드는 즉각적인 데이터 URL이더라도 기본적으로 내 URL에 "/ images /"를 앞에 붙입니다. 내가 다른 탭에서 이미지를 보려고했기 때문에 이것을 알았고 실패했습니다. 그러나 "/ images /"부분을 제거했을 때 제대로 작동했습니다. 두 번째 이유가 무엇인지 잘 모릅니다. 나는 방금 그것을 시도했다. 문자열의 일부가 특수 문자로 인해 끊어지는 것처럼 보이기 때문에 세 번째 오류가 발생했습니다. 네 번째 문자열에서 원시 문자열을 사용해 보았지만 작동하지 않았습니다.

이 시점에서 나는 혼란 스럽습니다. monkey-patch image_tag를 사용하여 데이터에 대한 내용을 미리 넣지 않도록합니다 : 삽입 된 이미지의 URL 또는 뷰 예제 3 또는 4에서와 같이 올바르게 렌더링되도록 문자열과 함께 펑키 한 작업을 수행합니까?

답변

5

방금 ​​비슷한 문제에 직면했습니다. 내 경우, 나는 application_helperbase64_image 정의 :

base64_image(@png_file) 
:
def base64_image image_data 
    "<img src='data:image/png;base64,#{image_data}' />".html_safe 
end 

그래서 귀하의 경우에 당신은이 대신 image_tag을 사용하십시오