Encontré un problema en el trabajo antes, cuando la cantidad de datos enviados por el formulario era grande, se informaba un error. Al revisar MSDN, aprendimos que la razón es que Microsoft limita el máximo de datos que se pueden recibir usando Request.Form() a 100K bytes. Microsoft recomienda usar Request.BinaryRead() para leer datos de formulario, pero dado que este método lee datos binarios, los datos leídos deben analizarse byte por byte para generar una cadena significativa (un programa en MSDN está escrito de esta manera, pero no No tenga en cuenta que los caracteres de escape, como la puntuación, requieren un análisis especial). Si este método apenas se puede utilizar para sistemas en inglés puro, será muy problemático para los sistemas chinos, porque los caracteres chinos están representados por dos bytes y los datos binarios leídos en sí no pueden determinar si son caracteres en inglés o chinos (de lo contrario, lo haría). no serán datos binarios, sino una cadena ^-^). En este caso, debe comprender las reglas de codificación de los caracteres chinos para poder realizar el análisis. Finalmente, incluso si el algoritmo puede analizar todo esto, piense en lo eficiente que es analizar byte por byte una cadena gigante de nivel MB. ¡Por lo tanto, este camino está bloqueado!
Sin embargo, siempre hay una manera. Al principio pensé que los datos totales del formulario no podían exceder los 100 KB, pero luego descubrí que era un límite para cada campo del formulario. La solución al problema es que para un dominio que necesita enviar grandes datos, divida los datos en varias partes más pequeñas que el límite antes de enviar el formulario, colóquelas en varios campos ocultos, borre los campos originales al mismo tiempo y luego presentar formalmente el formulario. El servidor todavía usa Request.Form() para leer los datos en cada campo oculto y luego unirlos en orden. El código principal es el siguiente:
Nota: Debe especificar un DIV dentro del código HTML en el formulario para insertar dinámicamente el campo oculto en él.
====Código de muestra del cliente====
Copie el código de código de la siguiente manera:
<Idioma SCRIPT=javascript>
// Los datos se dividen y se colocan en el dominio oculto correspondiente, que se activa en el evento onSubmit del formulario
función fnPreHandle()
{
var iCount; // ¿En cuántos dominios dividir?
var strData; //datos originales
var iMaxChars = 50000;//Considerando que los caracteres chinos son bytes dobles, el número máximo de caracteres en el dominio está limitado a 50K
var iBottleneck = 2000000; //Si el artículo supera los 2 millones de palabras, es necesario avisar al usuario.
var strHTML;//datos originales
strData = frmTest.BigField.value;// Si el artículo es demasiado largo, es necesario recordárselo al usuario
si (strData.length > iBottleCuello)
{
si (confirmar (El artículo que desea publicar es demasiado largo, se recomienda dividirlo en varias partes y publicarlas por separado./nSi insiste en enviarlo, tenga en cuenta que tardará mucho en enviarse correctamente./ n/n¿Insistes en enviar?) == false )
devolver falso;
}iCount = parseInt(strData.length / iMaxChars) + 1;//hdnCount registra en cuántos subcampos se divide el campo de datos original
strHTML = <tipo de entrada=nombre oculto=hdnCount valor= + iCount + >;//Generar código HTML para cada subdominio
para (var i = 1; i <= iCount; i++)
{
strHTML = strHTML + /n + <tipo de entrada=nombre oculto=hdnBigField + i + >;
}//Inserta dinámicamente el código HTML de cada dominio oculto en el DIV (divHidden) en el formulario
document.all.divHidden.innerHTML = strHTML;//Asignar valores a cada subdominio
para (var i = 1; i <= iCount; i++)
{
frmTest.elements[hdnBigField + i].value = strData.substring((i - 1) * iMaxChars, i * iMaxChars);
}//Borrar el campo de datos original
frmTest.BigField.value =;
}
</SCRIPT>
====Código de muestra del lado del servidor====
Copie el código de código de la siguiente manera:
<%
Dim strData
Dim intFieldCount
Dim iintFieldCount = Request.Form(hdnCount)For i=1 A intFieldCount
strData = strData y Solicitud.Form(hdnBigfield & i)
SiguienteRespuesta.Escribir strData
%>