Form Post 용량 큰 데이터 제출

2634 단어 FormPost
마이크로소프트 는 Request.Biary Read()로 폼 데 이 터 를 읽 는 것 을 권장 합 니 다.그러나 이 방법 은 바 이 너 리 데 이 터 를 읽 기 때문에 읽 은 데 이 터 를 바이트 별로 분석 하여 의미 있 는 문자열 을 생 성 해 야 합 니 다.(MSDN 의 한 프로그램 은 이렇게 쓰 여 있 지만 구두점 기호 등 전의 문 자 는 특별한 분석 이 필요 합 니 다)이런 방법 이 순수 영어 시스템 에 겨우 사용 된다 면 중국어 시스템 에 큰 문제 가 있 습 니 다.한 자 는 두 바이트 로 표시 되 기 때문에 읽 은 바 이 너 리 데이터 자체 가 영어 인지 한자 인지 판단 할 수 없습니다(그렇지 않 으 면 바 이 너 리 증거 가 아니 라 문자열 입 니 다^-^).이렇게 되면 한자 의 인 코딩 규칙 을 알 아야 분석 할 수 있다.마지막 으로 알고리즘 에서 이런 것들 을 모두 분석 할 수 있 더 라 도 MB 급 의 거대 한 문자열 을 바이트 별로 분석 하면 그 효율 이 어 떨 까?그래서 이 길 은 통 하지 않 는 다!하지만 방법 은 항상 있다.처음에 나 는 전체 폼 데이터 의 합계 가 100 KB 를 초과 할 수 없다 고 생각 했 는데 나중에 이것 이 폼 안의 모든 도 메 인 에 대한 제한 이라는 것 을 알 게 되 었 다.문제 의 해결 방법 은 빅 데 이 터 를 보 내야 하 는 도 메 인 에 대해 서 는 폼 을 제출 하기 전에 데 이 터 를 한도액 보다 작은 숫자 로 나 누 어 각각 여러 개의 hidden 도 메 인 에 두 고 기 존 도 메 인 을 비우 고 양식 을 정식으로 제출 하 는 것 이다.서버 쪽 에 서 는 Request.Form()으로 각 hidden 필드 의 데 이 터 를 읽 고 순서대로 연결 하면 됩 니 다.주요 코드 는 다음 과 같 습 니 다.주의:Form 의 HTML 코드 에 hidden 도 메 인 을 동적 으로 삽입 할 수 있 도록 DIV 를 지정 해 야 합 니 다.====클 라 이언 트 예시 코드===

<SCRIPT language=javascript>
  // , hidden , Form onSubmit
  function fnPreHandle()
  {
  var iCount; //
  var strData; //
  var iMaxChars = 50000;// , 50K
  var iBottleNeck = 2000000;// 2M ,
  var strHTML;//
  strData = frmTest.BigField.value;// ,
  if (strData.length > iBottleNeck)
  {
  if (confirm(" , 。
, 。

?") == false)
  return false;
  }iCount = parseInt(strData.length / iMaxChars) + 1;//hdnCount
  strHTML = "<input type=hidden name=hdnCount value=" + iCount + ">";// HTML
  for (var i = 1; i <= iCount; i++)
  {
  strHTML = strHTML + "
" + "<input type=hidden name=hdnBigField" + i + ">";
  }// Form DIV(divHidden) hidden HTML
  document.all.divHidden.innerHTML = strHTML;//
  for (var i = 1; i <= iCount; i++)
  {
  frmTest.elements["hdnBigField" + i].value = strData.substring((i - 1) * iMaxChars, i * iMaxChars);
  }//
  frmTest.BigField.value = "";
  }
  </SCRIPT>
===서버 쪽 예시 코드===

<%
  Dim strData
  Dim intFieldCount
  Dim iintFieldCount = Request.Form("hdnCount")For i=1 To intFieldCount
  strData = strData & Request.Form("hdnBigfield" & i)
  NextResponse.Write strData
  %>

좋은 웹페이지 즐겨찾기