如何在Sinatra中访问表单选定文件的文件内容?

时间:2012-07-26 15:13:04

标签: ruby sinatra html-form

我需要从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]

如何获取通过此表单上传的文件的文本?该文件不会保存在服务器上。

1 个答案:

答案 0 :(得分:3)

它发生在文件已经保存在服务器上(尽管临时文件作为临时文件对象)。您可以通过params-hash中的:tempfile访问它:

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