Savon将段落添加到base64字符串

时间:2016-07-12 18:51:18

标签: ruby-on-rails xml soap base64 savon

半年后,我正试图通过SOAP with savon将我的rails-app中的bas64编码pdf添加到Plentymarkets中的Order。这不像所描述的那样自由和简单,所以我联系了Plenty-support-team,在那里我被告知错误是关于包含换行符的我的Base64字符串。 所以我做了:

    file = open(@kvas.pdf_attachment.url).read
    @data = Base64.encode64(file).gsub(/\n/, '')

但即使我尝试了strict_encode64url_save_encode64以及.gsub("this",'that')的几种变体,也要阅读大量的线程'bout base64编码 我总是最终得到通过savon发送的xml-request中显示的Base64字符串中的换行符或段落。 Gedit显示从同样损坏的请求中复制的字符串,换行符以+开头(每个+提示换行符)或/(此处更加零星),直到我切换自动换行符。 Savon是否将换行解释为base64-string?我可以关掉那个行为吗?

我的Savon致电:

    client = Savon.client(
      :wsdl => @settings.wsdladdr,
      :soap_header =>  {
                "verifyingToken" => {
                "UserID" => @tokens.userid,
                "Token"=> @tokens.token
                }},
      :open_timeout => 20,
      :read_timeout => 20,
      :pretty_print_xml => false,
      :log => false,
      :mime_multipart => true
    )

response = client.call(:add_document, message: {:oPlentySoapRequest_AddDocument => {"DocumentList"=>{"item"=>{"OrderDocumentType"=>"RepairBill", "Document"=>{"FileData"=> "#{@data}","FileEnding"=>".pdf", "FileName"=>"66667"}, "OrderID" =>"4009", "CallItemsLimit"=>"1"}}}})

1 个答案:

答案 0 :(得分:0)

好吧,经过半年的尝试,我已经找到了答案(发布此问题后的第二天) 一切都很简单:

Base64.encode64(Base64.encode64(file)).sub(/\n/, '')
这就是诀窍 现在base64字符串是one_liner 谁会想到这个?一个双重编码的base64字符串??? !!! 我不得不说,一份好的文档可以让你免于麻烦