Ruby on rails 如何用ruby读取表单数据

Ruby on rails 如何用ruby读取表单数据,ruby-on-rails,ruby,http,firefox,Ruby On Rails,Ruby,Http,Firefox,在我的控制器中,request.body.read的结果是: ============= --AJAX-----------------------1267183973160 Content-Disposition: form-data; name="1261400603_page_white_word.png"; filename="1261400603_page_white_word.png" Content-Type: application/octet-stream thefile -

在我的控制器中,
request.body.read的结果是:

=============
--AJAX-----------------------1267183973160
Content-Disposition: form-data; name="1261400603_page_white_word.png"; filename="1261400603_page_white_word.png"
Content-Type: application/octet-stream

thefile
--AJAX-----------------------1267183973160
Content-Disposition: form-data; name="1261400536_page_white_excel.png"; filename="1261400536_page_white_excel.png"
Content-Type: application/octet-stream

thefile
--AJAX-----------------------1267183973160--
=============
它包含n个表单数据(在我的示例中为2个),我的目标是循环n个表单数据并获得数据
名称
文件名
和上载的文件,在我的示例中,我将二进制数据替换为
文件

下面是params散列的内容

{"action"=>"create", "controller"=>"photos", "1265144945_395.jpg"=>#<File:/var/folders/BT/BTpdsWBkF6myaI-sl3+1NU+++TI/-Tmp-/RackMultipart20100226-273-1un364r-0>}
{“action”=>“create”,“controller”=>“photos”,“1265144945_395.jpg”=>#
干杯

您考虑过使用or吗?它们经过战斗测试,比使用
request.body
做得更好。在任何情况下,您都可以按如下方式解析
request.body
,但这不是最好的解决方案

inputs =  request.body.read.split(/--ajax-+\d+-*/mi)

inputs.each do |input| 
  input.scan(/(.*)[\n\r]{2,4}(.*)/m) do |header, file| 
    header.scan(/name=["'](.*)["'];\s+filename=["'](.*)["']/) do |name, filename|
      puts name
      puts filename
    end
    puts file
  end
end

编辑:因此参数解析可能是的工作。我们可能应该重用源代码中的正则表达式,以便更可靠地解析它。另外,看起来rack正在为您创建某种类型的tmp文件。你能检查一下那个文件的内容吗

params
hash中有什么?我添加了params内容…params指向的文件存在吗?它的内容是什么?它是上传的文件,这个参数来自哪里?也许Rack::Utils::Multipart.parse_mulitpart正如您所说。。。很有意思,我得检查一下。重要细节。。。我使用Rails 3.0.0 Beta你可以在这里找到答案,数据是通过ajax请求提交的,使用sendAsBinary(仅Firefox 3)和回形针无法捕获文件(不知道为什么!),请参阅,谢谢。。我看到了这两个问题中的第一个,想知道答案会是什么…A把答案贴在这里