seit einem halben Jahr versuche ich nun ein Bas64 kodiertes PDF aus meiner Rails-App zu einem Auftrag in Plentymarkets via SOAP mit savon hinzuzufügen. Dies funktionierte nicht so frei und einfach wie beschrieben, daher kontaktierte ich das Plenty-Support-Team, wo mir mitgeteilt wurde, dass der Fehler meine Base64-Zeichenfolge mit Zeilenumbrüchen betrifft. Also habe ich:Savon fügt Absätze zu Base64 String hinzu
file = open(@kvas.pdf_attachment.url).read
@data = Base64.encode64(file).gsub(/\n/, '')
Aber obwohl ich strict_encode64
versucht, url_save_encode64
und einige Variationen von .gsub("this",'that')
, Tonnen von Threads gelesen ‚bout Base64-Kodierung ich durchweg mit Zeilenumbrüche und Absätze in der Base64-String am Ende gezeigt in der xml-Anfrage, die über savon gesendet wurde. Gedit zeigt den aus der Anfrage kopierten String in gleicher Weise beschädigt, mit Zeilenumbrüchen, beginnend mit +
(jeder + provoziert eine neue Zeile) oder /
(hier ist es eher sporadisch) bis ich den automatischen Zeilenwechsel umschalte. Interpretiert Savon Zeilenumbrüche in die Base64-Zeichenfolge? und kann ich dieses Verhalten ausschalten?
mein hier Savon Aufruf:
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"}}}})