我试图找出一种方法来显示不受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">