如何在Rails中从控制器提供静态内容?

时间:2013-12-11 11:07:32

标签: ruby-on-rails ruby static-content

我想从Rails中的控制器操作提供静态内容,就像Rails从公共目录中提供静态内容一样。我不想只是改变公共目录的路径或添加另一个路径到Rails来从那里提供文件。我想显式处理对控制器中特定文件的请求,以根据请求的文件验证请求。

我天真地试图使用send_file但是我不能再使用范围请求了。

class MyController < ApplicationController
  def dummyAction
    filePath = 'foo/bar/baz.mp3'
    send_file(filePath, {:filename => "baz.mp3", :type => "audio/mpeg"})
  end
end

我更喜欢使用Rails而不是自己编写所有代码。 Rails中有什么东西可以做到这一点吗?也许是宝石?

1 个答案:

答案 0 :(得分:-1)

最好将文件存储在assets目录中,或者创建静态资源控制器或使用公用文件夹。 请参阅:http://railscasts.com/episodes/117-semi-static-pages 如果你有权限 http://railscasts.com/episodes/117-semi-static-pages-revised 这也可能是有趣的: https://github.com/thoughtbot/high_voltage

但如果你必须采取这种(错误的)方式: 添加config \ routes.rb的路径

resources :MyController do
 collection do
   get 'dummyAction'
 end
end

将mime类型添加到config / initializers / mime_types.rb:

Mime::Type.register_alias "audio/mp3", :mp3

将控制器编辑为:

def dummyAction
 respond_to do |format|
   format.mp3
 end
end

将文件另存为MyController / dummyAction.mp3.erb