2013-12-11 81 views
3

我想用Rails中的控制器操作提供靜態內容,就像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

這是否回答有關幫助「通過由send_file接受字節範圍請求」? => http://stackoverflow.com/a/7604330/2463468 – benjaminjosephw

+0

我希望有一個更優雅的解決方案。 Rails似乎有設施來提供靜態內容。向公共目錄中提供MP3文件時,範圍請求將起作用。 –

回答

-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類型配置/初始化/ mime_types.rb:

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

編輯控制器:

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

將文件保存爲myController的/ dummyAction.mp3.erb