ruby-on-rails – Rails 3,显示来自RAILS_ROOT上方的本地文件系统的jpg图像

我试图找出一种方法显示不受RAILS_ROOT(在RedHat或Ubuntu环境下)的已安装文件系统中的图像.我不想使用符号链接,因为这个应用程序实际上是通过Tomcat部署的,当我关闭Tomcat时,Tomcat会尝试遵循符号链接删除挂载中的所有图像.由于这些文件数量和大小,将图像置于公共/图像下也不是一种选择.

我查看了send_file,但这只会显示一个图像.我需要在格式很好的页面显示6个请求的图像.我不想使用Base64编码,因为膨胀,但我不知道如何使用渲染页面传递图像数据.

同样,问题是在生成的HTML中无法通过URL访问图像,图像数据必须与页面的其余部分一起传递.我知道创建某种类型的服务来处理图像将是解决这个问题的最好方法,但是现在我只需要让它工作.

任何帮助非常感谢!

解决方法

由于显而易见的原因,Rails不允许用户访问RAILS_ROOT / public之外的文件系统部分.当你提到sendfile(或偏好的x-sendfile)时,你实际上就是那里的一部分.解决方案是让Rails像往常一样提供一个html页面,其中包含指向提供单个文件的Rails操作的链接.

例如,假设我想从文件系统深处的某个位置显示一些图像.首先,我必须创建一个一次提供一个图像的动作.所以在config / routes.rb中你可以添加以下内容

match '/serve_image/:filename' => 'images#serve'

然后我必须创建一个控制器来匹配该路线.例如:

class ImagesController < ApplicationController
  def serve
    path = "/my/servers/image/path/#{params[:filename]}"

    send_file( path,:disposition => 'inline',:type => 'image/jpeg',:x_sendfile => true )
  end
end

现在您的图片可以在网址下找到:/serve_image/my_image.jpg.所以最后要做的是创建一个很好的html页面,显示所有必要的图像.它很简单:

<img src="/serve_image/image1.jpg">
<img src="/serve_image/image2.jpg">
<img src="/serve_image/image3.jpg">
<img src="/serve_image/image4.jpg">

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...