2012-09-07 29 views
0

在我的應用程序中,用戶必須上傳一個文本文檔,然後通過接收控制器操作解析其內容。我已經成功上傳了文檔,但我無法閱讀其內容。在Rails中上傳和解析文本文檔

在這個問題上有幾個線程。我已經嘗試了或多或少的建議在這些線程上,我仍然無法解決問題。

這裏是我的代碼:

file_data = params[:file] 

contents = "" 

if file_data.respond_to?(:read) 
    contents = file_data.read 
else 
    if file_data.respond_to?(:path) 
    File.open(file_data, 'r').each_line do |line| 
     elts = line.split 
     # 
     # 
    end 
    end 
end 

因此,這裏是我的問題: '?respond_to代碼' file_data不無論是:read還是:path。根據該主題的其他一些線索,如果上傳的文件小於特定大小,則將其解釋爲字符串,並且將響應:讀取。否則,它應該回應:路徑。但在我的代碼中,它既不響應也不響應。

如果我嘗試取出if語句並立即嘗試File.open(file_data,'r'),我得到一個錯誤,指出找不到該文件。

有人可以幫我找出有什麼問題嗎?

PS,我真的很抱歉,這是一個多餘的問題,但我發現其他線程無益。

回答

0

你實際存儲文件嗎?因爲如果你不是,當然是找不到的。

+0

嗯,我想上傳文件將其存儲到服務器訪問的位置?我猜不會。我將如何保存文件? – user1639833

+0

確定它保存在臨時目錄中。我其實從來沒有這樣做過:p這裏是指南http://guides.rubyonrails.org/form_helpers.html#uploading-files –

+0

我重複rubyonrails指南的邏輯,我遇到了問題。 \t uploaded_io = params [:file] \t File.open(Rails.root.join('public','data',params [:file]),'w')do | file | \t \t file.write(uploaded_io.read) \t年底 我得到一個錯誤,指出存在的字符串沒有讀法。它在upload_io上調用'read',這是上傳文件的名稱。 – user1639833

0

首先,通過添加file_data.inspect的調試輸出,查明file_data實際得到的結果。這可能是你不希望的,特別是如果表單設置不正確(即:multipart => true)。

的Rails須附提供統一的接口,特殊對象上傳的文件,讓這樣簡單的東西應該工作:

file_data.read.each_line do |line| 
    elts = line.split 
    # 
    # 
end 
+0

file_data是一個字符串,即上傳的文本文件的名稱。我還在表單提交中包含了:multipart => true。以下是我的觀點中的相關代碼: <%= form_tag(:controller =>「static_pages」,:action =>「complete_registration」,:multipart => true,:method =>「post」)do%> < %= label_tag(:file,「上傳文本文件:」)%> <%= file_field_tag(:file)%> <%= submit_tag(「Register」)%> – user1639833

+0

'multipart'選項應該放到第二個'form_tag'的參數。你將它與URL選項混合,所以它最終在url中,而不是在窗體的'enctype'屬性中。嘗試將您的視圖代碼更改爲:<%= form_tag(:controller =>「static_pages」,:action =>「complete_registration」,{:multipart => true,:method =>「post」})do%>' –