半年后,我正试图通过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_encode64
,url_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"}}}})
答案 0 :(得分:0)
好吧,经过半年的尝试,我已经找到了答案(发布此问题后的第二天) 一切都很简单:
Base64.encode64(Base64.encode64(file)).sub(/\n/, '')
这就是诀窍
现在base64字符串是one_liner
谁会想到这个?一个双重编码的base64字符串??? !!!
我不得不说,一份好的文档可以让你免于麻烦