asp.net POST 데이터 흐름 에서 인자 와 파일 추출

아 날로 그 POST 요청 도 마찬가지다.그러나 때때로 POST 데이터 형식 을 모 의 하 는 것 이 표준적 이지 않 을 수도 있 고,서버 에서 데 이 터 를 얻 지 못 할 수도 있다.최근 에 이런 번 거 로 운 일 을 만 났 는데 데 이 터 는 한 협력 업 체 가 POST 를 모 의 한 것 이다.
어 쩔 수 없 이 다음 하책 이 떠 올 랐 다.그것 은 바로 받 아들 인 입력 흐름 을 분석 하여 원 하 는 데 이 터 를 추출 하 는 것 이다.예 를 들 어 내 가 앞에서 언급 한 데이터(두 개의 매개 변수,하나의 그림 파일)
실현 사고:입력 흐름 을 읽 고 비 파일 부분의 분석 을 통 해 전체 흐름 에서 파일 의 위치 와 크기 를 확인 한 다음 에 입력 흐름 을 다시 읽 어서 파일 을 얻 을 수 있 습 니 다.
위의 POST 데이터,매개 변수 부분 과 구분자 등 을 보면 모두 문자열 입 니 다.기본적으로 모두 영문 숫자 기호 등 이다.만약 에 중국어 로 보 내기 전에 인 코딩 을 할 수 있다 면 기본적으로 인 코딩 문제 로 인해 계산 실 수 를 하지 않도록 확보 할 수 있다(영문 문자 의 각 인 코딩 은 모두 같다).이 부분의 내용(파일 이 아 닌 부분,파일 부분 은 바 이 너 리 형식 으로 되 어 있 으 니 절대 이렇게 하지 마 세 요)을 얻 을 수 있 습 니 다.입력 한 흐름 을 받 아들 여 문자열 로 변환 합 니 다.매개 변수 에 중국어 가 있 으 면 클 라 이언 트 POST 에서 어떤 인 코딩 을 사용 하 는 지 주의 하 십시오.
 
byte[] input = Request.BinaryRead(Request.TotalBytes);
string source = Encoding.UTF8.GetString(input);
그리고 정규 표현 식 을 통 해 위의 비 파일 부분 과 일치 하 는 내용 을 생략 하고 얻 은 내용 을 by te[]로 전환 하여 길 이 를 계산 하 십시오.매개 변수의 값 은 여기에서 얻 을 수 있 습 니 다.
 
Regex rginput = new Regex(" ");
if (rginput.IsMatch(source))
{
int headLength=Encoding.UTF8.GetBytes(rginput.Match(source).Value)
}
동 리 는'-----------7da 119 c1004a 6-'의 길 이 를 계산한다.환 행 회수부 가 있 으 니 주의 하 세 요.이렇게 하면 파일 이외 의 부분 이 전체 흐름 에서 의 크기 를 확정 할 수 있 습 니 다.즉,파일 이 전체 흐름 에서 의 위치 와 크기 도 확정 되 었 습 니 다.그러면 원본 흐름 을 다시 읽 으 면 파일 부분 을 얻 을 수 있 습 니 다.파일 이 텍스트 형식 이 라면 이렇게 하지 않 고 매개 변수 부분 처럼 분석 하여 가 져 올 수 있 습 니 다.
 
//
FileStream fss = new FileStream("path", FileMode.Create);
fss.Write(input, headLength, input.Length-headLength-footLength);
fss.Close();
코드
 
//
byte[] imgcont = new byte[input.Length - headLength-footLength];
MemoryStream ms = new MemoryStream(input);
//
ms.Seek(headLength,SeekOrigin.Begin);
ms.Read(imgcont, 0, imgcont.Length);
ms.Close();
주:이 방법 은 어느 정도 위험 이 있다.바로 파일 의 크기 와 위치 에 대한 확정 이다.반드시 정확하게 계산 하고 입력 흐름 에 대한 분석 은 주도면밀 하고 전면적 이 어야 한다.그리고 파일 을 여러 개 로 올 릴 때 이 방법 은 귀 찮 습 니 다.더 좋 은 방법 이 있다 면 메 시 지 를 남 겨 서 교류 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기