2011-07-14 17 views
2

私は、私の見解でfile_fieldを入れている:Ruby on Railsで選択したファイルのフルパスを取得するにはどうすればよいですか?

<% form_for(:uploaded_file, @feed, :url => {:action=>'copy'}, :html=> {:multipart=>true}) do |f| %> 
<%= f.file_field :uploaded_file %> <br> 
<%= f.submit "Submit" %> 
<% end %> 

そして私は、Excelファイル読み込み私のコントローラのメソッドがあります:要求

"authenticity_token"=>"BbQRomTLhiF2O54/G6eHwnnaWbLttUSvo31FO3ZtKoA=", 
"uploaded_file"=>{"uploaded_file"=>#<ActionDispatch::Http::UploadedFile: 
0x27b7ab‌​0 @original_filename="test.xlsx",@content_type="application 
/vnd.openxmlformats-officedocument.spreadsheetml.sheet", @headers= 
"Content-Disposition: form-data; name=\"uploaded_file[uploaded_file]\"; 
filename=\"volumetrie.xlsx\"\r\nContent-Type: application/vnd.openxmlformats 
officedocument.spreadsheetml.sheet\r\n", @tempfile=#<File:C:/DOCUME~1/me/ 
LOCALS~1/Temp/RackMultipart20110714-524-fy6vu>>}, "commit"=>"Submit"} 

Iと

def copy 
    file = "" 
    book = Spreadsheet.open 'excel_file' 
    table = book.worksheet 'excel_sheet' 
    table.each do |row| 
     file << row 
    end 
end 

ログイン選択したファイルのパスをSpreadsheet.openメソッドに挿入しようとしています。エラーメッセージは次のとおりです。そのようなファイルまたはディレクトリはありません。

私のExcelファイルのパスである'excel_file'の代わりに、file_fieldで選択したファイルのパスを使用したいと思います。このパラメータはどのように使用できますか?

ありがとうございました!

+0

を試してみてください?あなたのマシンに関する情報を得ることができないので、ユーザのマシン上で – Gareth

+0

を実行することはできませんが、ユーザがxlsファイルを選択してデータベースに追加する方法を教えてください。 (パスを必要とせずに) – TW147

+0

ああ、ユーザーはブラウザのファイル選択ダイアログを使ってファイルを選択することができますが、サーバーに送られるすべてのファイルはファイル名とファイルの内容です – Gareth

答えて

1

あなたは、最近のブラウザでは、フォームからのファイルへのパスを取得することはできません。あなたが唯一の一時ファイルを扱うことができ、編集

params[ :uploaded_file ][ :tempfile ]として利用可能であるべきであるあなたは、ユーザーのマシン上のサーバー上のファイルの完全な場所、またはファイルの完全な場所を意味するか

file = Spreadshet::Excel.new('params[ :uploaded_file ][ :filename ]', 'w+') 
file.write(params[ :uploaded_file ][ :tempfile ].read) 
+0

私はすでにそれを試しました、それは私に空の文字列を返します。 – TW147

+0

エラーメッセージは次のとおりです:そのようなファイルやディレクトリがありません – TW147

+0

本当にRailsの新機能は残念です。選択したファイルのパスを 'Spreadsheet.open'メソッドに挿入しようとしています... – TW147

2

File.absolute_path(ファイル)

Ruby Doc

+0

どこでそのパラメータを使用しますか? – TW147

関連する問題