Michael Schulz: Binärdatei Browserseitig mit Script bearbeiten

Hallo zusammen,

bisher nutze ich zum Datenaustausch zwischen JS und dem Server XML. Die Rohdaten Serverseitig Base64 koodiert, innerhalb einer XML-Datei übertragen und Browserseitg per script wieder in die Rohdaten zurückcodiert und entsprechend weitergenutzt.
Das ganze funktioniert wunderbar und sieht ungefähr so aus:

xmlDatei = document.getElementsByTagName('xml').item(0);
 fillHistory(xmlDatei);
 }

fillHistory(xmlDatei)
 {
   allData = xmlDatei.getElementsByTagName('hist').item(0);
   if (!allData){...Fehlerbehandlung}
   else
   {
     mData = allRecs.getElementsByTagName('DATA');
     xmdata = nodeList.item(0).firstChild.nodeValue;
     myHexData = decode64(xmdata);
     binData = myHexToBin(myHexData);
     ...
    }
 }
myHexData und binData -> sind entsprechend Felder mit meinen Daten, mit denen ich wunderbar weiterarbeiten kann.

Nun zu meinem Problem:
Ich habe eine Datei, die zu gross ist, sie Serverseitig base64 zu kodieren und in einen XML-Rahmen zu packen. Der Server ist kein PC und hat nur eine sehr begrenzte Menge Arbeitsspeicher.
Die Daten, die in dieser Datei enthalten sind, sind Binär. Ich muss diese Datei praktisch "so wie sie ist" zum Browser schicken und dort entsprechend als ArrayOfByte einladen.

Im ersten Ansatz würde ich selber sagen, das wiederspricht den Ansätzen und geht nicht. Jedoch möchte ich mich selber auf ein "Mir ist noch nicht die richtige Lösung eingefallen" reduzieren und hoffe darauf, das mir jemand von Euch nen Tip oder einen Weg aufzeigen kann, wie dies doch möglich ist.

Vielen dank im Vorraus

Michael

  1. Ich habe eine Datei, die zu gross ist, sie Serverseitig base64 zu kodieren und in einen XML-Rahmen zu packen. Der Server ist kein PC und hat nur eine sehr begrenzte Menge Arbeitsspeicher.
    Die Daten, die in dieser Datei enthalten sind, sind Binär. Ich muss diese Datei praktisch "so wie sie ist" zum Browser schicken und dort entsprechend als ArrayOfByte einladen.

    Schreib einfach mal was Du bisher verucht hast, was warum (Fehlermeldung) nicht geklappt hat, und warum Du zum "Datenaustausch" zwischen Browser und Websrever auf solche komischen Ideen gekommen bist.

    Der Weg ist das Ziel.   ;)

    1. Ich habe eine Datei, die zu gross ist, sie Serverseitig base64 zu kodieren und in einen XML-Rahmen zu packen. Der Server ist kein PC und hat nur eine sehr begrenzte Menge Arbeitsspeicher.
      Die Daten, die in dieser Datei enthalten sind, sind Binär. Ich muss diese Datei praktisch "so wie sie ist" zum Browser schicken und dort entsprechend als ArrayOfByte einladen.

      Schreib einfach mal was Du bisher verucht hast, was warum (Fehlermeldung) nicht geklappt hat, und warum Du zum "Datenaustausch" zwischen Browser und Websrever auf solche komischen Ideen gekommen bist.

      Der Weg ist das Ziel.   ;)

      Die Idee/DasProblem ist, das ich die Daten aus der Datei aufbereitet anzeigen will. Den Weg über die XML's wie bereits beschrieben nutze ich schon bei mehreren Datensätzen und es funktioniert hervoragend. Also habe ich versucht, diesen Weg auch bei der Datei als ein Datensatz zu nutzen. Das scheitert wie gesagt an der "kleine" des Arbeitsspeichers.

      Die Datei zum arbeiten sieht Beispielsweise so aus:
      (In Hexschreibweise)
      0x25,0x3F,0x00,0xDF,0x01,0x11,0x1A,...

      Also alternative Idee1:
      Daten auf dem Server aufbereiten und direkt als HTML-Tabelle senden. Das geht nicht, da dies zeitlich extrem lange dauert (hätte die Daten direkt in den TCP-Stream integriert, daher wäre der Arbeitsspeicher nicht so Problematisch geworden).
      Nicht durchführbar.

      Alternative 2:
      In xx.htm
      <mxml id="data" src="data.txt"></mxml>

      In JavaScript:
      document.getElementsByTagName('mxml');
      Ergebis: lenght = 1, keine Daten

      document.getElementsByTagName('mxml').item(0);
      Neues Objekt, aber ohne Daten.

      document.getElementsByTagName('mxml').firstChild;
      Ergebnis: NULL

      document.getElementsByTagName('mxml').firstChild.data;
      Ergebnis: firstChild ist ja kein Objekt, geht natürlich nicht.

      Alternative 3:
      Da dies alles nichts fruchtete, habe ich versucht das ganze als Objekt einzubinden:

      <object data="data.txt" type="multipart/alternative" width="0" height="0">
       <param name="datax" value="data.txt">
      </object>

      Auch hier habe ich versucht, auf die Inhaltlichen Daten zuzugreifen und auch dieses hat nicht gefruchtet.
      Grundsätzlich ist für <object> doch nicht zwangsläufig ein "Textalisches" format definiert oder liege ich da falsch?

      Wo liegt wohl mein Denkproblem (Ausser das HTML ja Text ist.. :) )

      Michael

      1. Da Du ohnehin clientseitig JS nutzt, kannst Du das Laden der Binärdateien auch über XMLHttpRequest machen. Dann brauchst Du sie auch nicht als base64 kodierte Daten in XML zu verpacken oder überhaupt in die HTML Seite zu integrieren. Die Daten müssen lediglich per HTTP abrufbar sein.

        MfG
        GK

        1. Da Du ohnehin clientseitig JS nutzt, kannst Du das Laden der Binärdateien auch über XMLHttpRequest machen. Dann brauchst Du sie auch nicht als base64 kodierte Daten in XML zu verpacken oder überhaupt in die HTML Seite zu integrieren. Die Daten müssen lediglich per HTTP abrufbar sein.

          MfG
          GK

          Hallo Gerhard,
          ich habe das ganze Probiert, klappt auch fast ganz gut. Ich bekomme die Daten rüber, kann sie auch einer Variablen zuweisen, nur ich kann auf die Werte nicht zugreifen.

          var MyData = new Array();

          if (xmlHttp.readyState == 4)
          {
           MyData = xmlHttp.responseBody;
          }

          Bei Zugriff via: MyData[0]
          Als Fehlermeldung kommt:
          Kein Objekt.

          Im ScriptDebugger wird MyData als Byte of Array bezeichnet und enthält die korrekten Daten.

          Die Methode "xmlHttp.responseText" funktioniert in meinem Fall nicht, da es wie gesagt Binärdaten, also alles zwischen 0x00 und 0xFF, sind.

          Michael

          p.s.: Es reicht mir vorerst, wenn das ganze mit IE funzt, da jeder der HIER auf die Applikation Zugriff hat, diesen nutzen wird!

          1. Falls das mit den Binärdaten nicht funktioniert, kannst Du sie ja als base64 codierte Zeichenkette mit dem content-type text/plain verschicken und dann clientseitig wieder in Binärdaten umwandeln. In dem Fall sollte auch die Eigenschaft responseText funktionieren.

            MfG
            GK

            1. Falls das mit den Binärdaten nicht funktioniert, kannst Du sie ja als base64 codierte Zeichenkette mit dem content-type text/plain verschicken und dann clientseitig wieder in Binärdaten umwandeln. In dem Fall sollte auch die Eigenschaft responseText funktionieren.

              MfG
              GK

              Aus der Ursprünglichen Problemstellung:
              bisher nutze ich zum Datenaustausch zwischen JS und dem Server XML. Die Rohdaten werden Serverseitig Base64 koodiert, innerhalb einer XML-Datei übertragen und Browserseitg per script wieder in die Rohdaten zurückcodiert und entsprechend weitergenutzt.
              Nun zu meinem Problem:
              Ich habe eine Datei, die zu gross ist, sie Serverseitig base64 zu kodieren und in einen XML-Rahmen zu packen. Der Server ist kein PC und hat nur eine sehr begrenzte Menge Arbeitsspeicher.

              Also von da her...

              Michael

              1. Hi,

                Also von da her...

                ... bliebe mein Vorschlag, die Nullbytes zu maskieren.

                Gruß, Cybaer

                --
                Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                1. Hi,

                  Also von da her...

                  ... bliebe mein Vorschlag, die Nullbytes zu maskieren.

                  Gruß, Cybaer

                  Ja, wenn die NullBytes ausreichen, was ich erstmal bezweifeln mag. Wahrscheinlich muesste ich alles unter 0x20 anfassen und ggf auch noch alles > 0x7E.
                  so nach dem Motto:
                  0x00 => 0xC0 0xC1
                  0x01 => 0xC0 0xC2
                  0x02 => 0xC0 0xC3
                  ...
                  und natuerlich
                  0xC0 => 0xC0 0xC0

                  Ich denke, das erscheint mir nicht sinnvoll.

                  Im moment versuche ich, die Daten beim Aussenden zu catchen und diese entsprechend zu zwei Byte zu machen um das ganze als "ASCII-Hex" zu senden. Da sehe ich noch die grössten Chancen drin.

                  Michael

                  1. Hi,

                    Ja, wenn die NullBytes ausreichen, was ich erstmal bezweifeln mag.

                    Das magst Du bezweifeln, mußt Du aber nicht. Ajax hat nur mit dem Nullbyte "Probleme".

                    Hätte man ja auch leicht mal testen können ... =:-o

                    Im moment versuche ich, die Daten beim Aussenden zu catchen und diese entsprechend zu zwei Byte zu machen

                    Ich würde die % escapen, dann die Nullbytes und anschließend alles mit unescape() wieder rückkonvertieren ...

                    Gruß, Cybaer

                    --
                    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                    1. Ich weiss nicht, ob hierfür nen neuer Post sinnvoller gewesen wäre, habe mich aber doch für diesen Weg entschieden. Sollte ein zweiter Post sinnvoller sein, bitte ich die Moderatoren hiermit, diesen entsprechend zu generieren, danke.

                      Die Sorgen gehen weiter:
                      Ich habe das ganze jetzt folgendermassen umgesetzt:
                      Als Datenstrom kommt:
                      <?xml version="1.0"?>
                      <!DOCTYPE SERVTABS SYSTEM "central.dtd">
                      <SERVTABS>
                      <RECORD>
                      <NUM>01</NUM>
                      <DATA>AABB00.....8888</DATA>
                      </RECORD>
                      </SERVTABS>
                      Die Datei ist dann 129857 Byte gross.

                      Der Teilbereich unter <DATA></DATA> wird als Bytes wieder in ein Array geschrieben.
                      Dieses Werte ich Javascriptmaessig auf Byteebende aus.
                      Beispiel:
                      function GetEntry(entryNum)
                      {
                       var lVal=0;
                       var k=0;
                       k = 12 * entryNum;

                      lVal = (MyData[k+3+magicOffset] << 24) + (MyData[k+2+magicOffset] << 16) + (MyData[k+1+magicOffset] << 8) + (MyData[k+0+magicOffset]);
                       return lVal;
                      }

                      Das ganze funktioniert unter IE6 hervorragend. Ich bekomme alles so, wie es ist und auch sein sollte.
                      Probiere ich das ganze unter Firefox, wird nur ein Teilbereich innerhalb der Datei ausgewertet. Dieser jedoch richtig. Es wird am Anfang und am Ende etwas abgeschnitten. Entsprechend wird im Hinteren Bereich "NaN" für meine (INT)Werte ausgegeben. Der Vordere Bereich wird durch meine Valid-Logik entfernt. Die Daten in der Datei sind Vorne und Hinten Valide, ist halt nur als Sicherheit eingebaut. Der Teilbereich der sauber ausgewertet wird umfast 2024 Byte. Eine Fehlermeldung in der Fehlerkonsole kommt nicht.

                      Das selbe  Vorgehen nutze ich auch schon bei anderen Daten, die jedoch vom !Umfang wesentlich kleiner sind!. Hier funktioniert es bei folgenden Browsern reibunglos: IE, Firefox, Safari, Konquerer.

                      Hat hierzu jemand eine gute Idee bzw. denkanstoss?
                      Danke schonmal für die Unterstützung,

                      Michael

                      1. Hallo.

                        Ich weiss nicht, ob hierfür nen neuer Post sinnvoller gewesen wäre, habe mich aber doch für diesen Weg entschieden. Sollte ein zweiter Post sinnvoller sein, bitte ich die Moderatoren hiermit, diesen entsprechend zu generieren, danke.

                        Regelrechte Moderatoren gibt es hier gar nicht, und in anderer Leute Namen legt in der Redaktion auch niemand einen neuen Thread an. Und wenn du durch eigene Überlegung zu dem Entschluss gelangt bist, dies sei der richtige Ort für eine Weiterentwicklung deines Themas, ist doch alles in Ordnung.
                        Das nur dazu. In der eigentlichen Sache kann ich dir leider nicht behilflich sein.
                        MfG, at

              2. Du kannst Sie aber stückchenweise transportieren, damit Du nicht die gesamten Daten auf einmal in den Speicher laden mußt. Zerlege dazu jeweils 3 Bytes in 4 base64 kodierte Zeichen. Das macht 3*8=24 Bits, die in 4 base64 Zeichen a 6 Bits konvertiert werden. So brauchst Du lediglich den Speicher, um 3 Bytes base64 kodieren zu können. Die werden bei der Abfrage an den Client geschickt, dann liest Du die nächsten 3 Bytes aus der Datei usw. bis alle Bytes geschickt wurden.

                Für die serverseitige Konvertierung wäre dazu lediglich ein Feld mit den 64 base64-Zeichen erforderlich, also 64 Bytes.

                MfG
                GK

                1. Du kannst Sie aber stückchenweise transportieren, damit Du nicht die gesamten Daten auf einmal in den Speicher laden mußt. Zerlege dazu jeweils 3 Bytes in 4 base64 kodierte Zeichen. Das macht 3*8=24 Bits, die in 4 base64 Zeichen a 6 Bits konvertiert werden. So brauchst Du lediglich den Speicher, um 3 Bytes base64 kodieren zu können. Die werden bei der Abfrage an den Client geschickt, dann liest Du die nächsten 3 Bytes aus der Datei usw. bis alle Bytes geschickt wurden.

                  Dadurch schicke ich alle 1-2 ms 3 Codierte Byte über meine TCP. Bei 64KB dauert es damit bei 1 ms/3 ca. 22 Sec. ehe ich die Datei am Client habe zum anzeigen/bearbeiten.

                  Für die serverseitige Konvertierung wäre dazu lediglich ein Feld mit den 64 base64-Zeichen erforderlich, also 64 Bytes.

                  Das mit dem Base64 habe ich bei allen anderen Daten bereits gemacht. Von daher ist hier nichts zusätzliches nötig.

                  Ich habe jetzt meinen anderen Ansatz, die Daten beim Senden auf die Leitung zu Catchen (das aktuelle Sendebyte) und dies dann als 2 Byte HEX zu senden umgesetzt. Das funktioniert ganz vernünftig. Mit dieser Methode habe ich die Daten in ca. 3 Sek. am Client. Ich denke, ich werde es dabei belassen.

                  Michael

  2. Das ganze funktioniert wunderbar und sieht ungefähr so aus:

    xmlDatei = document.getElementsByTagName('xml').item(0);
    fillHistory(xmlDatei);
    }

    fillHistory(xmlDatei)
    {
       allData = xmlDatei.getElementsByTagName('hist').item(0);
       if (!allData){...Fehlerbehandlung}
       else
       {
         mData = allRecs.getElementsByTagName('DATA');
         xmdata = nodeList.item(0).firstChild.nodeValue;
         myHexData = decode64(xmdata);
         binData = myHexToBin(myHexData);
         ...
        }
    }

    Was mir auffällt ist der gebrauch von globalen Variabeln was niemals eine gute Idee ist.

    Die Daten, die in dieser Datei enthalten sind, sind Binär. Ich muss diese Datei praktisch "so wie sie ist" zum Browser schicken und dort entsprechend als ArrayOfByte einladen.

    Das geht nicht, da die Daten vom Browser immer als Text interpretiert werden und somit z.b. die Null immer ein Stringende ist.

    Was machst du eigentlich mit den biären Daten im Browser?

    Struppi.

    1. Was mir auffällt ist der gebrauch von globalen Variabeln was niemals eine gute Idee ist.

      Ich habe nur den wichtigen Teil gepostet und meinen Deklarationsbereich ausgelassen, damit der Post nicht künstlich aufgebläht wird.

      Die Daten, die in dieser Datei enthalten sind, sind Binär. Ich muss diese Datei praktisch "so wie sie ist" zum Browser schicken und dort entsprechend als ArrayOfByte einladen.

      Das geht nicht, da die Daten vom Browser immer als Text interpretiert werden und somit z.b. die Null immer ein Stringende ist.

      Was machst du eigentlich mit den biären Daten im Browser?

      Interpretieren und auf dieser Basis erzeuge ich Dynamisch eine Tabelle mit entprechenden Daten.

      Struppi.

      1. Was machst du eigentlich mit den biären Daten im Browser?
        Interpretieren und auf dieser Basis erzeuge ich Dynamisch eine Tabelle mit entprechenden Daten.

        Warum müssen die Daten binär sein?

        Struppi.

        1. Was machst du eigentlich mit den biären Daten im Browser?
          Interpretieren und auf dieser Basis erzeuge ich Dynamisch eine Tabelle mit entprechenden Daten.

          Warum müssen die Daten binär sein?

          Struppi.

          Punkt 1: Weil sie es sind.
          Punkt 2:
          Ein long-Wert, der den Wert 1000000000 hat beansprucht in einer
          Textalischen Darstellung: 10 Byte Platz ->1000000000
          Hexadezimalen Darstellung: 8 Byte Platz ->3B9ACA00
          Binären Darstellung: 4 Byte Platz->0x3B,0x9A,0xCA,0x00

          Um binär ist hier kein Drumrumkommen. Sonst hätte ich es schon längst geändert.

          Michael

          1. Was machst du eigentlich mit den biären Daten im Browser?
            Interpretieren und auf dieser Basis erzeuge ich Dynamisch eine Tabelle mit entprechenden Daten.
            Warum müssen die Daten binär sein?
            Punkt 1: Weil sie es sind.

            Hüstel, da gehts um Daten, die browserseitig in Tabellen dargestellt werden sollen. Retro-Johnny rät an das Vorhaben "klassisch" zu bearbeiten und - wenns denn schon sein muss - (clientseitig) JS-Datenbanken zu nutzen. Die Datenübergabe darf dann ganz vermutlich auch "nicht-binär" erfolgen.

            1. Was machst du eigentlich mit den biären Daten im Browser?
              Interpretieren und auf dieser Basis erzeuge ich Dynamisch eine Tabelle mit entprechenden Daten.
              Warum müssen die Daten binär sein?
              Punkt 1: Weil sie es sind.

              Hüstel, da gehts um Daten, die browserseitig in Tabellen dargestellt werden sollen. Retro-Johnny rät an das Vorhaben "klassisch" zu bearbeiten und - wenns denn schon sein muss - (clientseitig) JS-Datenbanken zu nutzen. Die Datenübergabe darf dann ganz vermutlich auch "nicht-binär" erfolgen.

              Was meinst Du mit klassich?
              Die Daten sind Binär vorhanden und können nur "so wie sie sind" übergeben werden, da ich leider so gut wie nichts an Speicher habe um das ganze umzuwandeln. Sonst würde ich es doch in meiner altbewärten Methode machen. Von daher ist Punkt 2 der wirklich ausschlaggebende. -> RAM ca. 1KByte, Rom ca. 100KByte <-

              1. Was meinst Du mit klassich?

                JS-Arrays bzw. serverseitiges Datenhandling.

                Die Daten sind Binär vorhanden und können nur "so wie sie sind" übergeben werden, da ich leider so gut wie nichts an Speicher habe um das ganze umzuwandeln. Sonst würde ich es doch in meiner altbewärten Methode machen. Von daher ist Punkt 2 der wirklich ausschlaggebende. -> RAM ca. 1KByte, Rom ca. 100KByte <-

                Moment, wir haben hier keine Server-Client Umgebung? Das wäre dann ja echt hamel. Du hast Daten, die Du nur binär übergeben kannst, weil der Server so eine Art Taschenrechner ist?

          2. Punkt 2:
            Ein long-Wert, der den Wert 1000000000 hat beansprucht in einer
            Textalischen Darstellung: 10 Byte Platz ->1000000000
            Hexadezimalen Darstellung: 8 Byte Platz ->3B9ACA00
            Binären Darstellung: 4 Byte Platz->0x3B,0x9A,0xCA,0x00

            Du hast wirklich ein Speicherplatzproblem.

            Um binär ist hier kein Drumrumkommen. Sonst hätte ich es schon längst geändert.

            Naja, andersrum wird ein Schuh draus, mit binär gibt es keine Lösung.

            Das einzige was mir einfiele, hats du mal versucht die kritischen Bytes (<32) zu maskieren?
            dann sollte es gehen, aber um eine Serverseitge Bearbeitung kommst du nicht drumherum.

            Struppi.

  3. Hi,

    Im ersten Ansatz würde ich selber sagen, das wiederspricht den Ansätzen und geht nicht. Jedoch möchte ich mich selber auf ein "Mir ist noch nicht die richtige Lösung eingefallen" reduzieren und hoffe darauf, das mir jemand von Euch nen Tip oder einen Weg aufzeigen kann, wie dies doch möglich ist.

    Die IMHO einzige browserübergreifende Möglichkeit wäre IMHO, die Daten normal mit Ajax anzufordern. Da aber responseText bei einem Nulölbyte abbricht, müßtest Du den Teil "hinter" dem Nullbyte erneut anfordern (Range-Request). Wenn die Binärdaten kein Nullbyte enthalten: Kein Problem, wenn sie nur sehr wenige Nullbytes enthalten und der Server Range-Requests unterstützt: Notlösung, wenn viele Nullbytes vorhanden sind: Wohl keine akzeptable Notlösung mehr.

    Ggf. könnte aber der Server nur die Nullbytes maskieren?

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hallo Cybaer.

      Ggf. könnte aber der Server nur die Nullbytes maskieren?

      Oder einfach den gesamten String base64-codieren. (Ja, die Datenmenge steigt damit enorm, aber zumindest ist sie schadfrei übertragbar.)

      Einen schönen Mittwoch noch.

      Gruß, Mathias

      --
      ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
      debian/rules
      1. Oder einfach den gesamten String base64-codieren. (Ja, die Datenmenge steigt damit enorm, aber zumindest ist sie schadfrei übertragbar.)

        [ ] Du hast den thread gelesen?

        Der Server ist anscheindend eine Art Taschenrechner

        Struppi.

        1. Hallo Struppi.

          Oder einfach den gesamten String base64-codieren. (Ja, die Datenmenge steigt damit enorm, aber zumindest ist sie schadfrei übertragbar.)

          [×] Du hast den thread gelesen?

          Der Server ist anscheindend eine Art Taschenrechner

          Und?

          Einen schönen Donnerstag noch.

          Gruß, Mathias

          --
          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
          debian/rules
          1. Hallo Struppi.

            Oder einfach den gesamten String base64-codieren. (Ja, die Datenmenge steigt damit enorm, aber zumindest ist sie schadfrei übertragbar.)

            [×] Du hast den thread gelesen?

            Der Server ist anscheindend eine Art Taschenrechner

            Und?

            Naja, ich glaube der OP erwähnte öfters das er die Daten auf dem Server nicht bearbeiten kann, weil dieser nicht genug Arbeitspeicher hat. Und Base64 hat er sogar im Orginalposting schon erwähnt, dass das nicht geht.

            Struppi.

            1. Hallo Struppi.

              Oder einfach den gesamten String base64-codieren. (Ja, die Datenmenge steigt damit enorm, aber zumindest ist sie schadfrei übertragbar.)

              [×] Du hast den thread gelesen?

              Der Server ist anscheindend eine Art Taschenrechner

              Und?

              Naja, ich glaube der OP erwähnte öfters das er die Daten auf dem Server nicht bearbeiten kann, weil dieser nicht genug Arbeitspeicher hat. Und Base64 hat er sogar im Orginalposting schon erwähnt, dass das nicht geht.

              Hm, muss ich wirklich überlesen haben, sorry.

              Einen schönen Donnerstag noch.

              Gruß, Mathias

              --
              ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
              debian/rules
              1. Hm, muss ich wirklich überlesen haben, sorry.

                Sag ich doch ;-)

                Struppi.

    2. Die IMHO einzige browserübergreifende Möglichkeit wäre IMHO, die Daten normal mit Ajax anzufordern. Da aber responseText bei einem Nulölbyte abbricht, müßtest Du den Teil "hinter" dem Nullbyte erneut anfordern (Range-Request).

      Das geht?

      Ich hab mal eben danach gesucht. Das einzige was ich gefunden habe war ein alter Thread von dir, wo du die Stichworte nach denen man suchen soll sagst (exakt die die auch benutzt hatte). Aber eine konkrete Seite die AJAX und range request erläutert habe ich nicht gefunden.

      Struppi.

      1. Hi,

        Das geht?

        Ja, es spricht auch nichts dagegen.

        Aber eine konkrete Seite die AJAX und range request erläutert habe ich nicht gefunden.

        Ist ja auch kein Hexenwerk. Man muß ja seinen Request-Headern nur einen Range-Request-Header beifügen (oder eben nur den senden). Wenn der Server Range-Requests unterstützt (ist wohl bei "normalen" Webservern üblich - jedenfalls ist mir aktuell, egal ob "kleinem" Provider oder Massenhostern, noch keiner untergekommen, der es nicht auch unterstützt), dann bekommt der Client ja nur die angeforderten Daten - also im Falle von Ajax ab dem Nullbyte.

        Das Ajax-Script darf dann aber natürlich nicht (nur) auf den Response-Status 200, sondern auch auf 206 reagieren.

        Abseits solcher "Binär-Würgarounds" können Range-Requests (gerade in Ajax) IMHO durchaus sinnvoll - jedenfalls wenn man weiß, was man braucht,und weiß, daß man nicht alles braucht. ;-)

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  4. Hallo zusammen,

    hier mal eine kurze Zusammenfassung als Wegweiser.
    Übertragen von Binärdaten zum Nutzen unter JavaScript

    Ich habe jetzt die Funktionalität 'XMLHttpRequest' die 'Gerhard Knabe' vorgeschlagen hat, genutzt. Für BaseInfos dazu mal bei Wiki(und die starken Infos:) schaun, da sind auch nen paar gute Links(stand natürlich heute).
    Damit funktioniert das ganze einwandfrei. Als kleiner Tip: Die Binärdaten kann man mit 'MyData = xmlHttp.responseBody;' in sein eigenes Array bekommen.
    Der einzige "Schönheitsfehler" ist, das das ganze halt als ActX läuft. Aber gut, man kann halt nur die Gegebenheiten nutzen, die auch da sind.

    Auf jeden Fall: Fettes danke an alle für die Hilfe!

    Wenn noch jemand einen anderen Weg kennt ohne ActX, wäre ich weiterhin für jeden Hinweis dankbar.
    Ggf. werde ich auch noch ein, zwei andere Wege probieren. Ein Ergebnis, wenn es den eins gibt, werde ich hier noch anhängen.

    Viele Grüße

    Michael

    1. Damit funktioniert das ganze einwandfrei. Als kleiner Tip: Die Binärdaten kann man mit 'MyData = xmlHttp.responseBody;' in sein eigenes Array bekommen.

      ich hab das mal probiert, funktioniert bei mir weder im FF 2 noch im IE 7,
      FF 2 liefert damit ein undefined, kennt also diese Eigenschaft nicht, der IE 7 sagt Zugriff verweigert, kann also diese Eigenschaft nicht auslesen.

      Struppi.

      1. Damit funktioniert das ganze einwandfrei. Als kleiner Tip: Die Binärdaten kann man mit 'MyData = xmlHttp.responseBody;' in sein eigenes Array bekommen.

        ich hab das mal probiert, funktioniert bei mir weder im FF 2 noch im IE 7,
        FF 2 liefert damit ein undefined, kennt also diese Eigenschaft nicht, der IE 7 sagt Zugriff verweigert, kann also diese Eigenschaft nicht auslesen.

        Struppi.

        Struppi,
        ich muss abbitte leisten. Bei mir funzt es soweit, das fürs Debuging ich das Angezeigt bekomme. In eine andere Variable kann ich es auch verschieben, aber drauf zugreifen kann ich nett (der auswertteil ist etwas grösser und ich hatte das ganze "schnell" probiert).
        Also, dies ist auch kein weg und ich stehe wieder am Dienstag.

        Michael
        (der vorschnelle)