2011-03-07 32 views
0

當我下載了包含"."其名稱中的文件,我的代碼拋出一個異常:使用「。」下載文件時出錯。在RoR3

No route matches "/test/download/File%201.0%20BETA.docx" 

的文件名是:「文件1.0 BETA.docx

這裏我的代碼在我的控制器文件中下載文件:

def download 
    path = params[:path] 
    path = "#{Rails.root}/public/data/" + path 
    send_file(path+"."+params[:format]) 
    end 

我該如何解決?

+1

你如何[保護](http://api.rubyonrails.org/classes/ActionController/Streaming.html#method-i-send_file)一些提供'params [:path] =的小丑= .. /../../ config/database'和'params [:format] = yaml'?如果他們得到'../'的數目是正確的,那麼看起來好像它將交出數據庫配置或者服務器上的任何其他文件,並且在名稱和正確權限中有一段時間。 – sarnold 2011-03-07 10:34:48

+0

您確定當前代碼中的失敗是由於'.'嗎?我先下注了'%20'沒有被解碼,並且調用'send_file()'試圖找到一個名爲'File @ 201.0%20BETA.docx'的文件。您可能需要首先對參數進行URL解碼。 – sarnold 2011-03-07 10:36:49

+0

@sarnold:我確定它是因爲「。」。當我刪除/替換「。」通過「_」它工作正常 – 2011-03-12 10:16:07

回答

0

這很可能是由於您的路線不支持多個「。」。在路徑中。例如,如果您的路線如下所示:

'/test/download/:path.:extension' 

然後,如果文件名包含多於一個「。」,則會中斷。

相反,你可以做這樣的路由:

'/test/download/*path.:extension' 

這將確保多個「」正在運作

相關問題