J'ai déjà rencontré un problème au travail. Lorsque la quantité de données envoyées par le formulaire était importante, une erreur était signalée. En vérifiant MSDN, nous avons appris que la raison en est que Microsoft limite le nombre maximum de données pouvant être reçues à l'aide de Request.Form() à 100 Ko. Microsoft recommande d'utiliser Request.BinaryRead() pour lire les données du formulaire, mais comme cette méthode lit les données binaires, les données lues doivent être analysées octet par octet pour générer une chaîne significative (un programme sur MSDN est écrit de cette façon, mais c'est le cas). ne tient pas compte du fait que les caractères d'échappement tels que la ponctuation nécessitent une analyse particulière). Si cette méthode est à peine utilisable pour les systèmes anglais purs, elle sera très gênante pour les systèmes chinois, car les caractères chinois sont représentés par deux octets et les données binaires lues elles-mêmes ne peuvent pas déterminer s'il s'agit de caractères anglais ou chinois (sinon, ce serait le cas). ne pas être une donnée binaire, mais une chaîne ^-^). Dans ce cas, vous devez comprendre les règles de codage des caractères chinois afin d'effectuer une analyse. Enfin, même si l'algorithme peut analyser tout cela, pensez à l'efficacité avec laquelle il est possible d'analyser une chaîne géante au niveau Mo octet par octet ? Par conséquent, cette route est bloquée !
Cependant, il existe toujours un moyen. Au début, je pensais que le total des données du formulaire ne pouvait pas dépasser 100 Ko, mais j'ai découvert plus tard qu'il s'agissait d'une limite pour chaque champ du formulaire. La solution au problème est que pour un domaine qui a besoin d'envoyer du Big Data, divisez les données en plusieurs parties plus petites que la limite avant de soumettre le formulaire, placez-les dans plusieurs champs masqués, effacez les champs d'origine en même temps, puis soumettre officiellement le formulaire. Le serveur utilise toujours Request.Form() pour lire les données dans chaque champ masqué, puis les regrouper dans l'ordre. Le code principal est le suivant :
Remarque : Vous devez spécifier un DIV dans le code HTML du formulaire pour y insérer dynamiquement le champ masqué.
====Exemple de code client====
Copiez le code comme suit :
<langage SCRIPT=javascript>
//Les données sont divisées et placées dans le domaine caché correspondant, qui est déclenché dans l'événement onSubmit du formulaire
fonction fnPreHandle()
{
var iCount; //Combien de domaines diviser
var strData; //données originales
var iMaxChars = 50000;//Étant donné que les caractères chinois sont des doubles octets, le nombre maximum de caractères dans le domaine est limité à 50 Ko
var iBottleNeck = 2000000; //Si l'article dépasse 2 millions de mots, l'utilisateur doit être invité
var strHTML;//données originales
strData = frmTest.BigField.value;//Si l'article est trop long, il faut le rappeler à l'utilisateur
si (strData.length > iBottleNeck)
{
if (confirmer(L'article que vous souhaitez publier est trop long, il est recommandé de le diviser en plusieurs parties et de les publier séparément./nSi vous insistez pour le soumettre, veuillez noter qu'il faudra beaucoup de temps pour le soumettre avec succès./ n/nInsistez-vous pour soumettre ?) == false )
renvoie faux ;
}iCount = parseInt(strData.length / iMaxChars) + 1;//hdnCount enregistre le nombre de sous-champs en lesquels le champ de données d'origine est divisé
strHTML = <input type=hidden name=hdnCount value= + iCount + >;//Générer du code HTML pour chaque sous-domaine
pour (var i = 1; i <= iCount; i++)
{
strHTML = strHTML + /n + <input type=hidden name=hdnBigField + i + >;
}//Insérez dynamiquement le code HTML de chaque domaine caché dans le DIV (divHidden) du formulaire
document.all.divHidden.innerHTML = strHTML;//Attribuer des valeurs à chaque sous-domaine
pour (var i = 1; i <= iCount; i++)
{
frmTest.elements[hdnBigField + i].value = strData.substring((i - 1) * iMaxChars, i * iMaxChars);
}//Effacer le champ de données d'origine
frmTest.BigField.value = ;
}
</SCRIPT>
====Exemple de code côté serveur====
Copiez le code comme suit :
<%
Dim strData
Dim intFieldCount
Dim iintFieldCount = Request.Form(hdnCount)For i=1 To intFieldCount
strData = strData & Request.Form (hdnBigfield & i)
NextResponse.Write strData
%>