String länger als 4095 Zeichen

  • Hallo Zusammen,

    ich habe ein beliebiges jpg, z.B aus einem Screenshot Tool)

    Dieses möchte ich an einem Webservice per Post Befehl übergeben, dazu muss diese Base64 Convertiert sein.

    Leider ist hier der Base64 String von diesem Bild dann länger wie die von Autoit erlaubten 4095 Zeichen. (but keep in mind that no line in an AutoIt script can exceed 4095 characters.))

    Mit der Anwendung Postman kann ich diesen String verarbeiten. Wie kann man das Problem für Autoit lösen?

    Gruß Marcel

  • mit diesem Stück Quellcode wandle ich das Bild in Base64

    Einmal editiert, zuletzt von gmmg (4. Dezember 2024 um 13:45)

  • das ist dann das JSON welches ich absende


  • was hat die max. Länge einer Codezeile mit deinem Problem zu tun?

    Ich bin grad nicht auf der Höhe, daher möge man mir mein Unverständnis verzeihen. 😁

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ausführbares Script ("as is"), dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

  • Schnuffel ja, da bin ich mir auch nicht 100% sicher. Gestern als ich mit einem Base64 Converter getestet habe, war der Base64 String des Bildes in einer Zeile. Wollte ich diesen per Autoit Post absetzen, kam der Fehler zurück, der auf die Zeichenbegrenzung von 4096 Zeilen hindeutet. Mit dem Tool Postman hingegen ging der Post Befehl mit diesem langen String durch.

    Nun habe ich bissl im engl Forum gestöbert und habe den Codeschnipsel zum base64 Convert gefunden. Diesen im ersten Step getestet und die gleiche Fehlermeldung bekommen.

    Jetzt nachdem ich dem Script im Base64 Code noch das StringReplace für @LF eingefügt habe läuft dieses.

    Code
    $FN = "D:\testbild.jpg"
    $dat=FileRead(FileOpen($FN,0))
    $objXML=ObjCreate("MSXML2.DOMDocument")
    $objNode=$objXML.createElement("b64")
    $objNode.dataType="bin.base64"
    $objNode.nodeTypedValue=$dat
    $objNode.Text = StringReplace($objNode.Text, @LF, '') ; entferne Zeilenumbruch

    sozusagen ist das Problem für diesen Fall gelöst.

    Gruß Marcel

  • Jetzt nachdem ich noch das StringReplace für @LF eingefügt habe läuft das Script zuverlässig.

    Heißt das gmmg dein Problem ist gelöst oder meinst du damit Text ==> Base64 läuft zuverlässig?

    Ansonsten frage ich mich, wie du den AutoIt POST request abfeuerst? WinHttp.au3 (_WinHttpSimpleRequest())?
    💡 Muss es wirklich AutoIt sein? Powershell per AutoIt ist auch schnell aufgerufen und fertig.

    Viele Grüße
    Sven

  • Falls ich dich richtig verstehe, dann willst du einfach den langen String in ein MultilineString umwandeln, damit du ihn dann dem POST request übergeben kannst?
    Eigentlich hat das eine nix mit dem anderen zu tun (dies zeugt davon das ich nicht komplett verstehe was du brauchst und willst), doch hier mal ein Beispiel anhand du uns sagen kannst ob es das ist.

    Alles Funktionen die ich rumliegen hatte, nix neues und daher ggf. auch nicht ganz so up-to-date, sollte aber funktionieren.

    Bin gespannt was du sagst 😁 . Erst siehst du den Base64 Code als Array, dann wird er dir gesplittet in die Zwischenablage kopiert. Dort kannst du ihr dir anschauen und sagen ob es das ist was du wolltest.

    Viele Grüße
    Sven

  • Hallo Sven,

    hoffe es geht dir gut und danke für deine Antwort :)

    Zum Post Befehl, das mache ich über die folgende FUNC.

    Das Problem ist für meine Nutzung gelöst, ich teste die Tage aber auch nochmal deinen Ansatz.

    Gruß Marcel

  • Hi Marcel 👋 ,

    nur zur Vollständigkeit: Ich habe mir den ersten Beitrag von dir nochmal durchgelesen und denke du wolltest eigentlich nur wissen, wie du einen überlangen Text bzw. String (länger als 4096 Zeichen), in AutoIt verwenden kannst - richtig? In meinem Beispiel wird einfach ein Multiline String genutzt, mehr ist es gar nicht. Der Rest davor ist die Umwandlung von Binary in Base64.

    Das Ganze hat wenig mit deinem POST Request zu tun, da du ja auch einfach ohne das Bild in base64 zu wandeln direkt beim POST Request mitgeben kannst (außer in deinem Fall gibt es da Einschränkungen?). Dann müsstest du einfach nur den Header Content-Type: multipart/form-data angeben und es sollte funktionieren.

    Naja, so oder so, es klappt ja irgendwie - daher "nur zur Vollständigkeit".

    Viele Grüße
    Sven