Ошибка "Request Object, ASP 0107 (0x80004005)" при сабмите формы
Статьи / ASP / Ошибки и их решения /
Назад
Признаки ошибки:
Когда Вы пересылаете через форму большой объем данных в Microsoft Internet Information Services 5.0, Вы можете получить следующее сообщение об ошибке:
Error Type:
Request object, ASP 0107 (0x80004005)
The data being processed is over the allowed limit.
Когда Вы пересылаете через форму большой объем данных в Microsoft Internet Information Services 4.0, Вы можете получить следующее сообщение об ошибке:
Request object error 'ASP 0107 : 80004005'
Stack Overflow
/projectname/page.asp, line XX
The data being processed is over the allowed limit.
Причина:
Предел размера каждой области формы, которую Вы получаете через объект Request, - 102 399 байтов. Ошибка происходит, когда Вы превышаете этот предел.
Решение:
Чтобы решать эту проблему, используйте один из следующих методов:
-
Вместо чтения данных форм через Request.Form collection используйте Request.BinaryRead (Request.TotalBytes).
-
Используйте схему File Upload, например такую как Microsoft Posting Acceptor.
-
Разбейте переменные формы HTML на несколько полей формы прежде, чем будет произведен submit. 102 399-байтовый предел установлен для каждого поля формы, поэтому Вы можете получить из одного большого поля несколько полей по 102399 байт. Следующий пример иллюстрирует это:
<FORM method=post action=/?scid=LargePost.asp&fp=1 name=theForm onsubmit="BreakItUp()">
<Textarea rows=3 cols=100 name=BigTextArea>A bunch of text...</Textarea>
<input type=submit value=go>
</form>
<SCRIPT Language=JavaScript>
function BreakItUp()
{
//Set the limit for field size.
var FormLimit = 102399
//Get the value of the large input object.
var TempVar = new String
TempVar = document.theForm.BigTextArea.value
//If the length of the object is greater than the limit, break it
//into multiple objects.
if (TempVar.length > FormLimit)
{
document.theForm.BigTextArea.value = TempVar.substr(0, FormLimit)
TempVar = TempVar.substr(FormLimit)
while (TempVar.length > 0)
{
var objTEXTAREA = document.createElement("TEXTAREA")
objTEXTAREA.name = "BigTextArea"
objTEXTAREA.value = TempVar.substr(0, FormLimit)
document.theForm.appendChild(objTEXTAREA)
TempVar = TempVar.substr(FormLimit)
}
}
}
</SCRIPT>
Для извлечения данных из формы в ASP-странице используйте следующий код:
<%
Dim BigTextArea
For I = 1 To Request.Form("BigTextArea").Count
BigTextArea = BigTextArea & Request.Form("BigTextArea")(I)
Next
%>
Оригинал статьи на англ. языке