假设我的图像不在正常位置:

{appname}/public/images/unconventional.gif

但是在这里:

{appname}/unconventional.gif

我知道这完全违反了Rails惯例,是不道德的,在任何情况下都不应该这样做,而且,为什么我甚至会提出这样一个愚蠢的事情呢?

好的,既然我们已经开始了,假设我在Windows上,因此符号链接是不可能的,怎么可能设置它?

有帮助吗?

解决方案

Rails不提供这些图像,它让Web服务器可以做到这一点。您最好更改Web服务器的配置以处理此方案。例如,如果您使用 Apache ,使用 mod_rewrite 进行设置会相当容易。

使Rails服务这些图像会很难看,但如果你在 routes.rb 中提供一个匹配 / public / images /的路径, 是可能的 unconventional.gif ,如果文件本身不存在。例如:

map.connect "public/images/unconventional.gif",
  :controller => "static_image_controller",
  :action => "serve"

然后创建一个控制器 StaticImageController

class StaticImageController < ApplicationController
  def serve
    image = File.read(File.join(Rails.root, "unconventional.gif"))
    send_data image, :type => "image/gif", :disposition => "inline"
  end
end

警告:如果您使用上述概念,请注意,如果您使用来自网址的输入来决定要投放哪个文件(使用 params [:file] ,例如),您需要彻底清理输入,因为您冒着将整个文件系统暴露给外界的风险。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top