3

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

4

1 回答 1

-2

最好将文件存储在资产目录中或创建静态资源控制器或使用公用文件夹。请参阅: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

于 2013-12-11T13:17:59.363 回答