2012-07-26 47 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

相关问题