2011-07-07 73 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

感謝西莫走了,我給一個去。 –