2012-09-18 57 views
0

喜幫我簡單的問題:Rails的簡單的文件下載

如何發佈簡單的下載:

我我的公共/數據我已經some.txt或some.pdf文件(使用一些文本)

我想用戶點擊某個按鈕並開始下載此文件。

我做這樣的事情

<%= link_to "Terms" ,:action => :download, :file_name => 'some.txt' %> 

def download 
    send_file "#{RAILS_ROOT}/public/data/#{params[:file_name]}", :type=>"application/zip" 
end 

但接下來做什麼?

PS如果你有關於這個問題(如下載文件)的一些教程或例子,我將非常感激

enter image description here

+0

當您點擊鏈接時會發生什麼?你有什麼錯誤嗎? –

+0

我得到了沒有路線匹配{:action =>「download」,:file_name =>「some.txt」,:controller =>「posts」} ///我是軌道中的新手和routes.rb中的路線 –

+0

Can你發佈你的routes.rb文件的內容? –

回答

1

你肯定在你的routes.rb缺少路線:

resources :posts do 
    get :download, :on => :collection 

    resource :comments 
end 

,然後你可以有這樣一個鏈接:

<%= link_to "Terms" ,:action => :download, :file_name => 'some.txt' %> 

,可能會產生類似:

<a href="/posts/download?file_name=some.txt">Terms</a> 

我認爲這仍不是最好的解決方案,但可以解決您的問題。

我推薦一個快速瀏覽一下Rails的指南,這部分澄清這一點: http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

的這個指導完整讀取總是好的,強烈推薦過。

0

究竟是什麼意思「下一步是什麼」?除了應用程序/ zip mime類型與您的文件(即.txt,所以可能的文本/平原)不匹配這一事實,您所寫的內容基本上是正確的。

兩件事情要記住,因爲你的文件是在公共目錄你不嚴格需要通過控制器使用send_file,你可以只寫這個:

<%= link_to "Terms", '/data/some.txt' %> 

其次,如果你'將使用send_file來服務更大的文件,而您可能希望查看xsendfile來改善性能。這必須得到你的網絡服務器的支持(例如,使用mod_sendfile)。

但是,所有這些都說你的代碼應該按原樣工作。

+0

我有路由錯誤,我剛開始學習rails,許多人不明白。在你的例子('/data/some.txt。') - >我得到「沒有路由匹配[GET]」/數據/一些。txt「」 –

+0

奇怪的是,無論在你的公共目錄下,都應該直接使用Rails插件。閱讀你在上面評論中寫的錯誤也很奇怪。下載動作是在PostsController右邊定義的?這聽起來像你的路線奇怪。你可以添加你的routes.rb文件(至少是帖子路線)到你的問題,所以我們可以檢查它? –

+0

oi解決了這個問題 - 所有的工作,但當我點擊鏈接,是與some.txt內容的開始頁面 - 但我怎麼能意識到:點擊鏈接 - 並打開'提示'窗口,詢問'保存文件或不,並選擇你想要保存文件的目錄' - 保存之前的標準提問 –