Hallo iedereen,
Ik wil een http post met type miltipary/form-data kunnen ontvangen. Opzich is dit mij al wel gelukt.
Maar met code die ik daar voor gebruikte was de cpu zwaar bezig (het was wel snel genoeg).
Eerst zou ik eens uitleggen wat ik precies bedoel.
In het HTTP protocol kan je op verschillende manier een pagina op vragen. GET en POST zijn de meeste gebruikte methodes. Met een POST stuurt de client zelf ook gegevens mee (bijv. een formulier (met of zonder bestanden)). Deze zogenaamde 'POST body' kan op verschillende manieren gecodeerd worden. Hier zijn application/x-www-form-urlencoded en multipart/form-data de meest gebruikte.
Standaart word application/x-www-form-urlencoded gebruikt. Hier worden variables net zoals in de url verstuurd. (in de var=value&var2=valu2&... vorm).
Bij multipart/form-data word dat in deze vorm gedaan:
(er word voor deze request een boundary mee bestuurd, dit is een willekeurige tekst)
Het nadeel van dit systeem ten opzichte van application/x-www-form-urlencoded is dat je van te voren niet weet hoe groot een body gaat zijn. Of te wel, je moet steeds alles in een buffer wegschrijven om te weten wanneer die boundary voor komt. Persoonlijk vind ik dit heel slecht ontworpen (als ze nou gewoon van te voren per body zouden melden hoe groot deze is...)
Ik heb dit dus afgevangen dmv van een buffer. Dit werkte, maar omdat ik alles dmv van een buffer moest doen kreeg de cpu het heel druk. In plaats van een bestand dat upgeload word direct weg te schrijven in een bestand, moest alles via de cpu gecontrolleerd worden etc.
Als het een gewone variable werd gepost schreef ik deze gewoon weg in een string, maar als het file was schreef ik deze weg in een bestand.
Weet iemand misschien een wel handige manier om dit te doen? (ik heb op internet niet echt veel kunnen vinden). Misschien een slimmigheidje om met de buffer om te gaan of een andere methode?
PS.
Ik schrijf dus een http server (in C++). Alles behalve een goede multipart/form-data handler heb ik al wel.
Ik wil een http post met type miltipary/form-data kunnen ontvangen. Opzich is dit mij al wel gelukt.
Maar met code die ik daar voor gebruikte was de cpu zwaar bezig (het was wel snel genoeg).
Eerst zou ik eens uitleggen wat ik precies bedoel.
In het HTTP protocol kan je op verschillende manier een pagina op vragen. GET en POST zijn de meeste gebruikte methodes. Met een POST stuurt de client zelf ook gegevens mee (bijv. een formulier (met of zonder bestanden)). Deze zogenaamde 'POST body' kan op verschillende manieren gecodeerd worden. Hier zijn application/x-www-form-urlencoded en multipart/form-data de meest gebruikte.
Standaart word application/x-www-form-urlencoded gebruikt. Hier worden variables net zoals in de url verstuurd. (in de var=value&var2=valu2&... vorm).
Bij multipart/form-data word dat in deze vorm gedaan:
(er word voor deze request een boundary mee bestuurd, dit is een willekeurige tekst)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| --BOUNDARY sub header 1 body 1 --BOUNDARY sub header 2 body 2 --BOUNDARY sub header 3 body 3 --BOUNDARY-- <-- einde boundary |
Het nadeel van dit systeem ten opzichte van application/x-www-form-urlencoded is dat je van te voren niet weet hoe groot een body gaat zijn. Of te wel, je moet steeds alles in een buffer wegschrijven om te weten wanneer die boundary voor komt. Persoonlijk vind ik dit heel slecht ontworpen (als ze nou gewoon van te voren per body zouden melden hoe groot deze is...)
Ik heb dit dus afgevangen dmv van een buffer. Dit werkte, maar omdat ik alles dmv van een buffer moest doen kreeg de cpu het heel druk. In plaats van een bestand dat upgeload word direct weg te schrijven in een bestand, moest alles via de cpu gecontrolleerd worden etc.
Als het een gewone variable werd gepost schreef ik deze gewoon weg in een string, maar als het file was schreef ik deze weg in een bestand.
Weet iemand misschien een wel handige manier om dit te doen? (ik heb op internet niet echt veel kunnen vinden). Misschien een slimmigheidje om met de buffer om te gaan of een andere methode?
PS.
Ik schrijf dus een http server (in C++). Alles behalve een goede multipart/form-data handler heb ik al wel.