Já encontrei um problema no trabalho. Quando a quantidade de dados enviados pelo formulário era grande, um erro era relatado. Verificando o MSDN, descobrimos que o motivo é que a Microsoft limita o máximo de dados que podem ser recebidos usando Request.Form() a 100K bytes. A Microsoft recomenda usar Request.BinaryRead() para ler dados de formulário, mas como esse método lê dados binários, os dados lidos precisam ser analisados byte por byte para gerar uma string significativa (um programa no MSDN é escrito desta forma, mas não funciona). não leve em consideração que caracteres de escape, como pontuação, requerem análise especial). Se este método for pouco utilizável para sistemas em inglês puro, será muito problemático para sistemas chineses, porque os caracteres chineses são representados por dois bytes e os próprios dados binários lidos não podem determinar se são caracteres ingleses ou chineses (caso contrário, seriam. não sejam dados binários, mas uma string ^-^). Neste caso, você deve compreender as regras de codificação dos caracteres chineses para realizar a análise. Finalmente, mesmo que o algoritmo possa analisar tudo isso, pense em quão eficiente é analisar uma string gigante de nível MB, byte por byte. Portanto, esta estrada está bloqueada!
No entanto, sempre há um caminho. A princípio pensei que o total de dados do formulário não poderia ultrapassar 100 KB, mas depois descobri que esse era um limite para cada campo do formulário. A solução para o problema é que para um domínio que precisa enviar big data, divida os dados em várias partes menores que o limite antes de enviar o formulário, coloque-os em vários campos ocultos, limpe os campos originais ao mesmo tempo e então enviar formalmente o formulário. O servidor ainda usa Request.Form() para ler os dados em cada campo oculto e, em seguida, juntá-los em ordem. O código principal é o seguinte:
Nota: Você precisa especificar um DIV no código HTML do formulário para inserir dinamicamente o campo oculto nele.
====Código de exemplo do cliente====
Copie o código do código da seguinte forma:
<linguagem SCRIPT=javascript>
//Os dados são divididos e colocados no domínio oculto correspondente, que é acionado no evento onSubmit do Formulário
função fnPreHandle()
{
var iCount; //Em quantos domínios dividir
var strData; //dados originais
var iMaxChars = 50000;//Considerando que os caracteres chineses são bytes duplos, o número máximo de caracteres no domínio é limitado a 50K
var iBottleNeck = 2000000; //Se o artigo exceder 2 milhões de palavras, o usuário precisará ser avisado
var strHTML; //dados originais
strData = frmTest.BigField.value;//Se o artigo for muito longo, o usuário precisa ser lembrado
if (strData.length > iBottleNeck)
{
if (confirm(O artigo que você deseja publicar é muito longo, é recomendável dividi-lo em várias partes e publicá-las separadamente./nSe você insistir em enviar, observe que levará muito tempo para enviar com sucesso./ n/nVocê insiste em enviar?) == false )
retornar falso;
}iCount = parseInt(strData.length / iMaxChars) + 1;//hdnCount registra em quantos subcampos o campo de dados original é dividido
strHTML = <input type=nome oculto=hdnCount value= + iCount + >;//Gerar código HTML para cada subdomínio
for (var i = 1; i <= iCount; i++)
{
strHTML = strHTML + /n + <tipo de entrada=nome oculto=hdnBigField + i + >;
}//Insira dinamicamente o código HTML de cada domínio oculto no DIV (divHidden) do Formulário
document.all.divHidden.innerHTML = strHTML;//Atribuir valores a cada subdomínio
for (var i = 1; i <= iCount; i++)
{
frmTest.elements[hdnBigField + i].value = strData.substring((i - 1) * iMaxChars, i * iMaxChars);
}//Limpa o campo de dados original
frmTest.BigField.value = ;
}
</SCRIPT>
====Código de amostra do lado do servidor====
Copie o código do código da seguinte forma:
<%
DimstrData
Dim intFieldCount
Dim iintFieldCount = Request.Form(hdnCount)For i=1 Para intFieldCount
strData = strData & Request.Form(hdnBigfield & i)
NextResponse.Write strData
%>