2011-07-07 63 views
2

我有一个rails 3网站,它从iphone应用程序获取xml请求(包括文件提交)。 iPhone应用程序压缩它的XML请求,来通过我的控制器这样的(这是一个简单的,只是更新了几个细节,而不是发送的任何文件)的身体:Rails:如何解压缩一个压缩的xml请求体?

params = {"\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x035\xCAA\x0E\x83 \[email protected]\xD1\xD3\xE8\xD20\x02R\x17\xDD4\xBD\x87\x01\x9CZ\"H\x03CHo\xDF\xB2`\xFB\xDFO\xF8\x89\x89\x06\xF9\xA81\x9D/\x1F\xEB\x96IS\xC9\x83|\xDE\xF9\x98\xBA\xE2E\xE9\xBB\xD9X.j\xC2F"=>{"\xE8\xFD\xEF\xE4\x02\xB6\x00\x1C\x18\x13\x1C\xA4\xEC\x82A"=>nil}, "\xDF\x88\xA2\xCEt\xBA}\xAA\xCE{\xA7C\x1E\x04"=>nil, "\x1AN6\x86~gw\xB4\xD7\x00\x82\xE0r\xC1\x9D\x8B\xDB\xAC\xD6uF.\xCCb%\x03\x83\xA0\xD4\x0F~\xA0o\x1F\xAE\x00\x00"=>nil, "action"=>"update", "controller"=>"reports", "id"=>"65", "format"=>"xml"} 

它看起来应该是像这样:

params = {"report"=>{"workflow_status"=>"-1", "entry_count"=>"0"}, "auth"=>{"time"=>"1310044269", "email"=>"[email protected]", "sig"=>"686062dbc27ef49baa69be77a0ba6362"}, "action"=>"update", "controller"=>"reports", "id"=>"65", "format"=>"xml"} 

注意,第一个例子是不是第二的压缩版本,即某些值会有所不同,但总的结构应该是相同的(一旦它的解压缩)。

谁能告诉我我是如何解压的?压缩的参数来自请求主体,在某些情况下也会包含filedata。

感谢您的任何意见 - 最大

回答

4

您可以使用Richard Schneeman's answer

Mime::Type.register "gzip/json", :gzipjson 
config.middleware.delete "ActionDispatch::ParamsParser" 
config.middleware.use ActionDispatch::ParamsParser , { Mime::GZIPJSON => Proc.new { |raw_request | data = ActiveSupport::JSON.decode(ActiveSupport::Gzip.decompress(raw_request)); data = {:_json => data} unless data.is_a?(Hash); data.with_indifferent_access }} 

这应该在config/environment.rb

+0

感谢西莫走了,我给一个去。 –