>128K uit form verwerken met ASP/VBScript

Pagina: 1
Acties:

  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 02-08 18:07
Ik probeer een database te vullen via een webinterface, maar ik loop tegen een beperking van het http-protocol op. Ik heb een pagina gemaakt met daarin het volgende formulier
code:
1
2
3
4
5
6
7
8
9
<form method="POST" action="voorraad.asp" name="Formulier">
  <p align="center">Plak hieronder de inhoud van A-STOCK.TXT</p>
  <p align="center"><textarea rows="25" name="Data" cols="20">11-12-2001
9999.99.9999
9999.99.9999
2111.11.1111 41
2111.11.1111 42</textarea></p>
  <p align="center"><input type="submit" value="Importeer"><input type="reset" value="Begin opnieuw"></p>
</form>

Deze testdata wordt door onderstaande code in voorraad.asp perfect verwerkt
code:
1
2
3
4
5
6
7
8
<%
Dim Regels, Regel
Regels = Split(Request.Form("Data"), vbNewLine)
For Each Regel in Regels
  Regel = Replace(Regel, ".", "-")
  Response.Write("Deel 1: " & Left(Regel,11) & " - Deel 2: " & Right(Regel,3) & "<br>") & vbCrLf
Next
%>

Als ik echter een grote hoeveelheid tekst (>128KB volgens mij) in het formulier plak en dit verstuur krijg ik een unspecified error. Door aan het formulier
code:
1
enctype="multipart/form-data"

toe te voegen kan ik wel grote hoeveelheden tekst versturen, maar kan ik de verstuurde code niet meer uitlezen.

Ik heb al geexperimenteerd met Request.BinaryRead() en Response.BinaryWrite() maar ik kom er niet uit.

Wie weet er genoeg van ASP/VBScript om me verder te helpen?

  • Blue-eagle
  • Registratie: September 2000
  • Niet online
De error message zegt gewoon helemaal niks? Dan ligt het idd aan de beperkingen van HTTP. Misschien moet je dan de inhoud van de textarea splitten, en 2 keer versturen naar 2 hidden frames ofzo. Het kan vast makkelijker, maar ik ga nu eten :Y)

Verwijderd

De grens van de textfield data ligt iid op 128k, maar als je grotere texten naar de server wil posten moet je gebruik maken van zo'n upload componentje.

  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 02-08 18:07
Blue-eagle:
De precieze foutmelding luidt:

Error Type:
(0x80020009)
Exception occurred.

en treedt op in de regel
code:
1
Regels = Split(Request.Form("Data"), vbNewLine)

Als ik alleen een
code:
1
Response.Write Request.Form("Data")

probeer krijg ik een foutmelding die mijn vermoeden bevestigt:

Error Type:
Request object, ASP 0107 (0x80020009)
The data being processed is over the allowed limit.


DaGURU:
Ik heb geen upload-componenten tot mijn beschikking, maar die zijn volgens mij ook niet nodig. Door aan het form enctype="multipart/form-data" toe te voegen kun je grote hoeveelheden data in één keer doorsturen. Het probleem is dat ik niet weet hoe ik die ontvangen data dan weer bruikbaar maak. Met
code:
1
Response.BinaryWrite(Request.BinaryRead(Request.TotalBytes))

krijg ik als output in de HTML:

-----------------------------7d1512650356
Content-Disposition: form-data; name="Data"

111201
99999.999.9XXX
99999.999.9XXX
2111.81.1 38
2111.81.1 38
2111.81.1 38
Nog veel meer te importeren data
2828.99.1 37
2828.99.2 40
-----------------------------7d1512650356--

Het lukt me niet om dit op de één of andere manier in een variabele te krijgen.

Is er nog hoop?

  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 02-08 18:07
Ik begrijp dat er geen hoop is om dit simpel werkend te krijgen :?

  • Johannes Verelst
  • Registratie: Februari 2001
  • Laatst online: 14-11-2022
Volgens mij is ASP de bottleneck, en dan vooral de maximale lengte van een String in VBScript. Als ik me niet vergis mag een string maixmaal 256*256-1 = 65535 tekens lang zijn. 128Kb is dan gewoon te groot ... :(

There are no stupid questions, but there are a lot of inquisitive idiots.


  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 02-08 18:07
ASP/VBScript zijn NIET de bottleneck. Ik heb heel precies getest wanneer ik de melding (The data being processed is over the allowed limit.) krijg en die treed echt pas bij 128K aan data op. Zowel
code:
1
Response.Write(Request.Form("Data"))

als
code:
1
2
3
4
5
6
7
'Schrijf de formdata gemodificeerd weg
Dim Regels, Regel
Regels = Split(Request.Form("Data"), vbNewLine)
For Each Regel in Regels
  Regel = Replace(Regel, ".", "-")
  Response.Write("Deel 1: " & Left(Regel,11) & " - Deel 2: " & Right(Regel,3) & "<br>") & vbCrLf
Next

werken perfect tot 128K en daarna ineens niet meer.

Verder ben ik nog op http://www.ietf.org/rfc/rfc1867.txt een document tegengekomen dat het voorstel is om enctype="multipart/form-data" toe te voegen aan de form-tag. Dit was specifiek nodig om grotere hoeveelheden data (zoals file-uploads) te kunnen versturen omdat het POST-statement hier niet voldoende mogelijkheden voor heeft.

Ondertussen sta ik dus op het punt om een file-upload te gaan gebruiken, maar ik kan hierbij dus geen gebruik maken van een upload-component. Ik blijf erbij dat met Request.BinaryRead() en Response.BinaryWrite() dit probleem moet kunnen worden opgelost, maar ik geloof niet dat iemand hier me kan helpen :'( of heb ik het mis *D

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
je kunt ook via dat upload component een binary write doen. Je kunt je txt dan als blob de DB in gooien.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 02-08 18:07
Ik wil iedereen graag bedanken voor zijn hulp, maar uiteindelijk heb ik een oplossing gevonden (Blue-eagle zat er het dichtsbij) op de Microsoft-site.

Voor iedereen die hierin geïnteresseerd is, een bezoekje aan http://support.microsoft.com/default.aspx?scid=kb;EN;q273482 lost het probleem helemaal voor je op (inclusief voorbeeld javascript)
Pagina: 1