我需要从HTML表单中获取.csv文件并解析所有数据。
现在我在ruby脚本中使用CSV gem来解析本地文件并使用以下代码将其发布到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
现在我创建了一个Sinatra网站,其中包含一个简单的表单,其中包含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]
如何获取通过此表单上传的文件的文本?该文件不会保存在服务器上。
答案 0 :(得分:3)
它发生在文件已经保存在服务器上(尽管临时文件作为临时文件对象)。您可以通过params-hash中的:tempfile
访问它:
content = params[:datafile][:tempfile].read