【问题标题】:How to serve static content from a controller in Rails?如何从 Rails 中的控制器提供静态内容?
【发布时间】:2013-12-29 07:52:46
【问题描述】:

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

【问题讨论】:

  • 这个答案是否有关“通过 send_file 接受字节范围请求”的帮助? => stackoverflow.com/a/7604330/2463468
  • 我希望有一个更优雅的解决方案。 Rails 似乎有提供静态内容的工具。范围请求在从公共目录提供 MP3 文件时起作用。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-02-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2012-08-02
    • 1970-01-01
    相关资源
    最近更新 更多