Post large form data to ASP - Request.Form and stack overflow error?
ActiveX RegEdit.   ActiveX User account Manager   Pure-ASP Upload
Export MDB/DBF from ASP   Active LogFile   WebChecker   ActiveX/ASP Multi Dictionary object
 See 
 also 
 IISTracer, real-time IIS monitor and logging tool.
 Huge ASP file upload with progress bar. 



Do you like this article?
Please, rate it
and write review!
Rated:
by Aspin.com users
What do you think?
 Top messages
 4.5.2002 9:16:43 
 Send an email from ASP (WSH) using VBSscript, CDONTS and Outlook. (nbsp;ASP / ASP.NetWSHVBScriptEmail)
 22.3.2003 17:07:03 
 Work with binary files in VBSscript - read and write local and remote files (nbsp;WSHFile & data transferFunctionsVBScript)
 22.3.2003 19:18:41 
 Read and write SQL image data, store binary file to sql table. (nbsp;WSHDatabaseConversionVBScript)

 Post large form data to ASP - Request.Form and stack overflow error? 

 Areas>Languages>VBScript
 Areas>ASP / ASP.Net>Functions>http
 Areas>ASP / ASP.Net>File & data transfer
Request object error 'ASP 0107 : 80020009' 

Stack Overflow 

/post/post.asp, line 0 

The data being processed is over the allowed limit. 
      Great message. The ASP limit for FORM data processing (Request.Form) is about 100kB (sometimes 80k, sometimes 105k or similar). You will get the message above if you try to post more data to an ASP page. Grr....
      MS says that The size limit of each form field is exactly 102,399 bytes (Q273482, PRB: "Request object, ASP 0107 (0x80004005)" Error When You Post a Form)
      You can use Huge asp file upload.ASPForm to handle POST requests. Huge asp file upload.ASPForm contains hi-performance, low resources consumption algorithm which can accept up to 2GB of data with multipart (upload) or x-www-form-urlencoded forms.

      But there is a work around for this terrible 'feature' - we can build our own function, which will read binary data from input (x-www-form-urlencoded data) and then we can split the data to fields and decode to text fields. This article contains ASP include, which does the form processing and decoding. You can use it by the next way:
<!--#INCLUDE FILE="_largeform.asp"-->
<Form Method=Post>
  <Input Name=TestField><br>
  <textarea Name=Text ROWS=30 COLS=100>Some laaaarge data</textarea>
<br>
  <Input type=Submit>
</Form>
<%
Dim FormFields
Set FormFields = GetForm

Dim Field
For Each Field In FormFields
  Response.Write "<br>" & Field & ":" & Len(FormFields(Field))
Next
%>
     FormFields has similar functionality as Request.Form - except one. FormFields uses Scripting.Dictionary, so you cannot have two source fields with the same name or multiselect field.
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
'Process of x-www-form-urlencoded POST data
'Using BinaryRead, v1.00
'2001 Antonin Foller, PSTRUH Software, http://www.motobit.com
Function GetForm
  'Dictionary which will store source fields.
  Dim FormFields
  Set FormFields = CreateObject("Scripting.Dictionary")

  'If there are some POST source data
  If Request.Totalbytes>0 And _
    Request.ServerVariables("HTTP_CONTENT_TYPE") = _
    "application/x-www-form-urlencoded" Then

    'Read the data
    Dim SourceData
    SourceData = Request.BinaryRead(Request.Totalbytes)

    'Convert source binary data To a string
    SourceData = RSBinaryToString(SourceData)

    'Form fields are separated by "&"
    SourceData = split(SourceData, "&")
    Dim Field, FieldName, FieldContents
  
    For Each Field In SourceData
      'Field name And contents is separated by "="
      Field = split(Field, "=")
      FieldName = URLDecode(Field(0))
      FieldContents = URLDecode(Field(1))
      'Add field To the dictionary
      FormFields.Add FieldName, FieldContents
    Next
  end if'Request.Totalbytes>0
  Set GetForm = FormFields
End Function

Function URLDecode(ByVal What)
'URL decode Function
'2001 Antonin Foller, PSTRUH Software, http://www.motobit.com
  Dim Pos, pPos

  'replace + To Space
  What = Replace(What, "+", " ")

  on error resume Next
  Dim Stream: Set Stream = CreateObject("ADODB.Stream")
  If err = 0 Then 'URLDecode using ADODB.Stream, If possible
    on error goto 0
    Stream.Type = 2 'String
    Stream.Open

    'replace all %XX To character
    Pos = InStr(1, What, "%")
    pPos = 1
    Do While Pos > 0
      Stream.WriteText Mid(What, pPos, Pos - pPos) + _
        Chr(CLng("&H" & Mid(What, Pos + 1, 2)))
      pPos = Pos + 3
      Pos = InStr(pPos, What, "%")
    Loop
    Stream.WriteText Mid(What, pPos)

    'Read the text stream
    Stream.Position = 0
    URLDecode = Stream.ReadText

    'Free resources
    Stream.Close
  Else 'URL decode using string concentation
    on error goto 0
    'UfUf, this is a little slow method. 
    'Do Not use it For data length over 100k
    Pos = InStr(1, What, "%")
    Do While Pos>0 
      What = Left(What, Pos-1) + _
        Chr(Clng("&H" & Mid(What, Pos+1, 2))) + _
        Mid(What, Pos+3)
      Pos = InStr(Pos+1, What, "%")
    Loop
    URLDecode = What
  End If
End Function


Function RSBinaryToString(Binary)
  'Antonin Foller, http://www.motobit.com
  'RSBinaryToString converts binary data (VT_UI1 | VT_ARRAY)
  'to a string (BSTR) using ADO recordset
  
  Dim RS, LBinary
  Const adLongVarChar = 201
  Set RS = CreateObject("ADODB.Recordset")
  LBinary = LenB(Binary)
  
  If LBinary>0 Then
    RS.Fields.Append "mBinary", adLongVarChar, LBinary
    RS.Open
    RS.AddNew
      RS("mBinary").AppendChunk Binary 
    RS.Update
    RSBinaryToString = RS("mBinary")
  Else
    RSBinaryToString = ""
  End If
End Function
</SCRIPT>
 
 

See also for 'Post large form data to ASP - Request.Form and stack overflow error?' article:

     URLDecode function VBS source code to decode URL encoded strings (reverse to Server.URLEncode)
     Convert a binary data (BinaryRead) to a string by VBS This article, demonstrates several versions of source VBS code you can use to work with binary data in ASP and convert the data to a String format.

If you like this page, please include next link on your pages:
<A
 Href="http://www.motobit.com/tips/detpg_largepost/"
 Title="This article shows a way to
  work with request.form fields with
  any size, without 'Stack overflow'
  error."
>Post large form data to ASP - Request.Form and stack overflow error?</A>

     IISTracer - IIS ISAPI real-time monitor IISTracer is a real-time monitoring tool for Microsoft IIS, which will show/log you what is happenning on IIS server right now. It let's you reveal problems with long-running scripts (.asp, .cgi, cfm...), hang-up states and low resource situations and lets you stop long-running requests (uploads/downloads).      ActiveX User account Manager - Set of simple objects for creating, deleting, and managing user accounts, groups, servers and domains in the Windows NT environment.
     Active log file - Hi-performance text file logging for ASP/VBS/VBA applications. Lets you create daily/weekly/monthly log files with variable number of logged values and extra timing and performance info.      ActiveX windows registry editor - Intuitive, easy to use COM interface to windows registry. Set of classes to read/enumerate/modify windows registry keys and values from ASP, VBS and T-SQL.
     ActiveX/ASP Multi Dictionary object - Free-threaded hi-speed dictionary algorithm with unique/nonunique keys (map/multimap). Connect to another dictionary object in the same process. Lock and Unlock methods to synchronize tasks (application scope). Share ASP Application/Session objects.      Export DBF/MDB from ASP - Conversion from recordset to MDB/DBF. Direct binary output of MDB or DBF files from ASP pages with one row of code.
     Pure-ASP upload - lets you upload files using Pure ASP VBS code (using multipart/form-data and input type=file).      ByteArray - Works with safearray binary data (VT_UI1 | VT_ARRAY) - save/restore binary data from disk, find, work with code pages, convert to string/hexstring(SQL).
     WebChecker - Checks http, https, ftp and gopher internet connections in regular intervals. Lets you monitor web site functionality (uptime). Enables restart or notification on problems.      HTTPLog ISAPI filter - Lets you log incomming/outgoing http header and document data to separate files. Monitor of IIS service input/output.

© 1996 – 2008 Antonin Foller, PSTRUH Software, e-mail help@pstruh.cz