使用respond_to返回图像

时间:2010-10-14 10:20:48

标签: ruby-on-rails

如何在respond_to do |format|区块内返回图像?

我已经完全组装了图像(即没有丑陋的博客组装)和特定的URL(因为它位于公共文件夹中),我只需要能够为特定的其他URL查询返回该图像。 / p>

例如,图像在

public/cars/userid/car_id/random_name.JPG

我希望能够在用户访问

时提供该图像
http://mywebsite.com/car_id.JPG

因为让用户必须知道useridrandom_name,这是令人望而却步的。我的网址public/cars/userid/car_id/random_name.JPG已经为@car.public_filename,因为@carattachment_fu个对象。

3 个答案:

答案 0 :(得分:1)

您可以将浏览器重定向到图像:

redirect_to @car.public_filename

答案 1 :(得分:1)

您还可以编写一个小型Metal中间件,将所有/car_id.JPG网址重新路由到真实文件:

#app/metal/serve_car.rb
# Allow the metal piece to run in isolation
require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails)

class ServeCar
  def self.call(env)
    if env["PATH_INFO"] =~ /^\/car_(\d+).JPG$/
      path = Car.find($1).public_filename
      [302, {"Content-Type" => "text/html", "Location" => path}, ["You are being redirected"]]
    else
      [404, {"Content-Type" => "text/html"}, ["Not Found"]]
    end
  end
end

答案 2 :(得分:0)

如果您想在respond_to中使用其他mime类型,可以在config/initializers/mime_types.rb中添加。这是一个例子:

Mime::Type.register "text/richtext", :rtf