2011-01-10 34 views
4

這很難解釋,所以我會盡我所能,並希望編輯問題,如果人們需要更多的信息。我沒有提供確切的代碼,但僅僅是問題的一個例子。rails如何渲染具有正確文件名的文件

我正在使用rails 2.3.8。我在Unix上。

我有一堆文件在不可訪問的Apache目錄下。 (即/data/files/file.rpk)

在我看來,我有以下幾點。

link_to "RPK File", :controller => 'mycontroller', :action=> 'myaction', :file => '/data/files/file.rpk' 

我在我的控制器中有以下內容。

def myaction 
    if FileTest.exists?(params[:file]) 
    render :file => params[:file] 
    end 
end 

當我選擇的頁面,我得到一個下載提示我想要的文件的鏈接,但該文件的名稱是「myaction」,而不是文件名。

關於如何正確命名的想法?

回答

8

聽起來像send_file的工作。 x_sendfile選項可防止您的工作人員在傳輸實際文件時繼續忙碌。你可以在this blogpost瞭解更多。

send_file path_to_file_on_filesystem, :type => "application/zip", :x_sendfile => true 
+0

啊,是`send_file`在這裏是更合適的選擇。很好的接收。 – 2011-01-11 02:06:17

8

您想要使用send_data:filename選項。請參閱API documentation

你想成爲非常小心與此,雖然。永遠不要相信客戶/用戶!他們會發送file=../../../../etc/group或其他東西來讀取系統中的任意文件,因此在將其傳遞給任何文件讀取方法之前,請確保清除該值。

+0

這也是一個有用的答案。 – Kirby 2011-01-10 20:11:37