2

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

{appname}/public/images/unconventional.gif

但在这里:

{appname}/unconventional.gif

我知道这完全违反了 Rails 约定,是不道德的,在任何情况下你都不应该这样做,而且,我为什么还要提出这样愚蠢的事情呢?

好的,既然我们已经解决了这个问题,假设我在 Windows 上,因此符号链接是不可能的,那么如何设置它呢?

4

1 回答 1

6

Rails 不提供这些图像,它让 Web 服务器来做。您最好更改 Web 服务器的配置来处理这种情况。Apache例如,如果您使用mod_rewrite.

让 Rails 为这些图像提供服务会很丑陋,但如果你在match中提供了一个路由,并且文件本身不存在,那么它是可能的。例如: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

警告:如果您使用上述概念,请注意,如果您使用来自 URL 的输入来决定服务哪个文件(params[:file]例如,使用 ),您需要彻底清理输入,因为您有将整个文件系统暴露给外面的世界。

于 2009-06-22T21:39:16.023 回答