轨3,从上面RAILS_ROOT本地文件系统显示JPG图像(Rails 3, displaying

2019-06-27 01:11发布

我试图想出一个办法来显示从没有受到RAILS_ROOT(在RedHat或Ubuntu环境)安装的文件系统映像。 我不想用一个符号链接,因为这个应用程序是通过Tomcat的实际部署和Tomcat试图跟随符号链接并删除所有图像在山上时,我关闭Tomcat。 把下公共/图像的图像也不是一种选择,由于这些文件的数量和大小。

我看着由send_file,但将只显示一个图像。 我需要一个很好的格式化页面显示6个请求的图像。 我宁愿不使用的,因为膨胀的Base64编码,但我不知道怎么回事的图像数据传下来所呈现的页面。

同样,问题是,图像无法通过URL在生成的HTML浏览,图像数据必须被传递下来的页面的其余部分。 我知道,创造一些类型的服务,以服务器最多图像是处理最好的办法,但现在我只需要得到这个工作。

任何帮助非常感谢!

Answer 1:

由于显而易见的原因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

现在,您的图片的URL下可用:/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">


文章来源: Rails 3, displaying jpg images from the local file system above RAILS_ROOT