我想从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中有什么东西可以做到这一点吗?也许是宝石?
答案 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