【问题标题】:Rails: how to unzip a compressed xml request body?Rails:如何解压缩压缩的 xml 请求正文?
【发布时间】:2011-07-07 13:17:36
【问题描述】:

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

params = {"\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x035\xCAA\x0E\x83 \x10@\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"=>"fake@fakedomainzzz.com", "sig"=>"686062dbc27ef49baa69be77a0ba6362"}, "action"=>"update", "controller"=>"reports", "id"=>"65", "format"=>"xml"}

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

谁能告诉我怎么解压?压缩后的参数来自请求正文,在某些情况下还会包含文件数据。

感谢任何建议 - 最大

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 zlib


    【解决方案1】:

    你或许可以使用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

    【讨论】:

    • 谢谢 Seamus,我会试试看的。
    猜你喜欢
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2020-06-22
    • 1970-01-01
    • 2022-01-09
    • 2021-09-12
    相关资源
    最近更新 更多