Ich bin bei der Arbeit auf ein Problem gestoßen, wenn die vom Formular gesendete Datenmenge groß war, wurde ein Fehler gemeldet. Bei der Überprüfung von MSDN haben wir herausgefunden, dass der Grund darin liegt, dass Microsoft die maximale Datenmenge, die mit Request.Form() empfangen werden kann, auf 100 KB begrenzt. Microsoft empfiehlt die Verwendung von Request.BinaryRead() zum Lesen von Formulardaten. Da diese Methode jedoch Binärdaten liest, müssen die gelesenen Daten Byte für Byte analysiert werden, um eine aussagekräftige Zeichenfolge zu generieren (ein Programm auf MSDN wird auf diese Weise geschrieben, tut es aber). (berücksichtigen Sie dabei nicht, dass maskierte Zeichen wie Satzzeichen einer besonderen Analyse bedürfen). Wenn diese Methode für rein englische Systeme kaum verwendbar ist, wird sie für chinesische Systeme sehr problematisch sein, da chinesische Zeichen durch zwei Bytes dargestellt werden und die gelesenen Binärdaten selbst nicht bestimmen können, ob es sich um englische oder chinesische Zeichen handelt (andernfalls wäre dies der Fall). keine binären Daten sein, sondern eine Zeichenfolge ^-^). In diesem Fall müssen Sie die Codierungsregeln chinesischer Schriftzeichen verstehen, um eine Analyse durchführen zu können. Selbst wenn der Algorithmus all dies analysieren kann, denken Sie schließlich darüber nach, wie effizient es ist, eine riesige Zeichenfolge auf MB-Ebene Byte für Byte zu analysieren. Daher ist diese Straße gesperrt!
Es gibt jedoch immer einen Weg. Zuerst dachte ich, dass die gesamten Formulardaten 100 KB nicht überschreiten dürften, aber später fand ich heraus, dass dies eine Grenze für jedes Feld im Formular war. Die Lösung des Problems besteht darin, dass Sie bei einer Domäne, die große Datenmengen senden muss, die Daten vor dem Absenden des Formulars in mehrere Teile aufteilen, die kleiner als das Limit sind, sie in mehreren ausgeblendeten Feldern platzieren, gleichzeitig die ursprünglichen Felder löschen und dann Senden Sie das Formular offiziell ab. Der Server verwendet weiterhin Request.Form(), um die Daten in jedem versteckten Feld zu lesen und sie dann der Reihe nach zusammenzufügen. Der Hauptcode lautet wie folgt:
Hinweis: Sie müssen im HTML-Code im Formular ein DIV angeben, um das ausgeblendete Feld dynamisch einzufügen.
====Client-Beispielcode====
Kopieren Sie den Codecode wie folgt:
<SCRIPT-Sprache=Javascript>
//Die Daten werden aufgeteilt und in der entsprechenden versteckten Domäne platziert, die im onSubmit-Ereignis des Formulars ausgelöst wird
Funktion fnPreHandle()
{
var iCount; //Wie viele Domänen sollen aufgeteilt werden?
var strData; //Originaldaten
var iMaxChars = 50000;// Da chinesische Zeichen Doppelbytes sind, ist die maximale Anzahl von Zeichen in der Domäne auf 50 KB begrenzt
var iBottleNeck = 2000000; //Wenn der Artikel mehr als 2 Millionen Wörter umfasst, muss der Benutzer dazu aufgefordert werden
var strHTML;//Originaldaten
strData = frmTest.BigField.value;//Wenn der Artikel zu lang ist, muss der Benutzer daran erinnert werden
if (strData.length > iBottleNeck)
{
Wenn (bestätigen(Der Artikel, den Sie veröffentlichen möchten, ist zu lang. Es wird empfohlen, ihn in mehrere Teile aufzuteilen und diese separat zu veröffentlichen./nWenn Sie auf der Übermittlung bestehen, beachten Sie bitte, dass die erfolgreiche Übermittlung lange dauern wird./ n/nBestehen Sie auf dem Absenden?) == false )
return false;
}iCount = parseInt(strData.length / iMaxChars) + 1;//hdnCount zeichnet auf, in wie viele Unterfelder das ursprüngliche Datenfeld aufgeteilt ist
strHTML = <input type=hidden name=hdnCount value= + iCount + >;//HTML-Code für jede Subdomain generieren
for (var i = 1; i <= iCount; i++)
{
strHTML = strHTML + /n + <input type=hidden name=hdnBigField + i + >;
}//Den HTML-Code jeder versteckten Domäne dynamisch in das DIV (divHidden) im Formular einfügen
document.all.divHidden.innerHTML = strHTML;//Weisen Sie jeder Subdomäne Werte zu
for (var i = 1; i <= iCount; i++)
{
frmTest.elements[hdnBigField + i].value = strData.substring((i - 1) * iMaxChars, i * iMaxChars);
}//Das ursprüngliche Datenfeld löschen
frmTest.BigField.value = ;
}
</SCRIPT>
====Serverseitiger Beispielcode====
Kopieren Sie den Codecode wie folgt:
<%
StrData dimmen
Dim intFieldCount
Dim iintFieldCount = Request.Form(hdnCount)For i=1 To intFieldCount
strData = strData & Request.Form(hdnBigfield & i)
NextResponse.Write strData
%>