Versionen dieses Beitrags

multipart/form-data

pl
  • multipart/form-data
  • hi @Robert B.
  • > Wenn ich ein klassisches HTML `<form>`{: .language-html} verwende, bekomme ich mit mit deinem `binary/name+value` nichts hochgeladen:
  • >
  • > ~~~html
  • > <form action="/cgi-bin/form.pl" method="post" enctype="binary/name+value">
  • > ~~~
  • Logisch: Der Browser kennt diesen Enctype nicht. Den musst Du Dir mit JS zusammenbauen und den Request mit AJAX feuern, siehe [da](http://rolfrost.de/c.html)
  • Was meinen Algorithmus für formdata betrifft, bin ich auf strstr() gekommen. Allerdings krieg ich übr die Pointerarithmetik falsch Längenangaben, ich mach dann mal ein Beispiel (oder was falsch).
  • MfG
  • PS: Guck Dir mal Transfer-Encoding: chunked an. Da ist der Response Body zerstückelt, aber es sind Längenangaben drin (in HEX), womit man die Chunks wieder exakt zusammensetzen kann. Der Algorithmus ist in der RFC beschrieben und recht einfach nachzubauen. Ein schönes Beispiel für einen Serializealgorithmus.
  • Der Schritt zur binären Serialisierung besteht nur darin, die Längenangaben mit dem Datentyp `uint32_t` zu machen, was sowohl mit `pack "V", $len` (Perl, PHP) als auch mit JS zu machen ist.
  • ~~~js
  • function gcc(){
  • var params = sampleform(0);
  • params.unshift({"name":"cc","value":"1"});
  • var xhr = new XMLHttpRequest();
  • xhr.open('POST','/c.html');
  • xhr.setRequestHeader('Content-Type','binary/name+value');
  • throbber(true);
  • xhr.onload = function(){
  • throbber(false);
  • var res = JSON.parse(this.response);
  • $("#out").html(xr( $("#tt").html(), {valeins:res.valeins, valzwei:res.valzwei, valdrei:res.valdrei}, true ) );
  • };
  • xhr.send( slice2binary(params) );
  • return false;
  • }
  • ~~~
  • die Funktionen sind in request.js