2012-07-26 65 views
0

我需要從HTML表單獲取.csv文件並解析所有數據。如何訪問Sinatra中選定文件的文件內容?

現在我使用CSV寶石Ruby腳本解析一個本地文件並將其與此代碼發佈到Pardot表單處理程序:

require 'net/http' 
require 'uri' 
require 'csv' 

uri = URI('<form handler url>') 

CSV.foreach("<csv file location>", :headers => :first_row) do |row| 
    res = Net::HTTP.post_form(uri, 'city' => row['city'], 
           'state' => row['state'], 
           'zip' => row['zip'], 
           'country' => row['country'], 
           'phone' => row['phone'], 
           'fax' => row['fax'], 
           'website' => row['website'], 
           'first_name' => row['first_name'], 
           'last_name' => row['last_name'], 
           'job_title' => row['job_title'], 
           'Company' => row['Company'], 
           'leadtype' => row['leadtype'], 
           'tradeshow_attended' => row['tradeshow_attended'], 
           'industry' => row['industry'], 
           'email' => row['email'], 
           'boothsize' => row['boothsize'], 
           'company' => row['company'], 
           'source' => row['source'], 
           'address_one' => row['address_one'], 
           'address_two' => row['address_two'] 
           ) 
end 

現在我已經創建了一個西納特拉網站用一個簡單的表單,其中包含一個用於url的文本輸入和一個用於csv文件的文件上傳。

我想要做的是將CSV文件的數據拖到上面的腳本。

這裏是我的形式:

<form action="" enctype="multipart/form-data" method="post"> 
       <p> 
        <label>Form Handler URL</label><input name="url" type="text"/> 
       </p> 
       <p> 
        <label>Please specify a file</label> 
        <input type="file" name="datafile"> 
       </p> 
       <div> 
        <input type="submit" value="Submit"> 
       </div> 
      </form> 

我可以使用

params[:datafile] 

我如何獲得通過這種形式上傳文件的文本文件的信息?該文件不會保存在服務器上。

回答

3

發生這種情況的文件已經保存在服務器上(儘管臨時文件是臨時文件對象)。你可以通過:tempfile在params-hash中訪問它:

content = params[:datafile][:tempfile].read 
+0

這麼簡單...謝謝! – 2012-07-26 16:14:56

相關問題