2014-03-01 2 views
0

현재 원시 HTTP 요청을 구문 분석하는 HTTP 라이브러리를 작성하고 있습니다. 파일 업로드를 처리하기 전까지는 모든 것이 잘 진행되고 있습니다. 아래 발췌는 내 브라우저가 서버에 보내는 것입니다.C# HTTP 파일 업로드 처리

POST/HTTP/1.1 
Host: 127.0.0.1:4588 
Connection: keep-alive 
Content-Length: 298 
Cache-Control: max-age=0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Origin: null 
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)   Chrome/33.0.1750.117 Safari/537.36 
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryhbdh0xLSA8wBoWuq 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 

------WebKitFormBoundaryhbdh0xLSA8wBoWuq 
Content-Disposition: form-data; name="NAMEFile"; filename="TestData.png" 
Content-Type: image/png 

<PNG File as bytes> 
------WebKitFormBoundaryhbdh0xLSA8wBoWuq 
Content-Disposition: form-data; name="submit" 

Submit 
------WebKitFormBoundaryhbdh0xLSA8wBoWuq-- 

현재, I는 요청을 읽은 다음, 모든 것을 분할 신체의 어떤 Content-Length 헤더를 사용하여 누락 된 경우 계산하고 오는 신체의 나머지를 기다리는 문자열로 돌려 필요한 경우. 내 요점은, 나는 전체 메시지 본문이 서버에 도착하는지 확실히 알고 있습니다. 또한 Content-Type에 지정된 경계를 사용하여 본문을 정확히 분할했음을 알고 있습니다.

내 질문, 위의 코드에서 "PNG File bytes"로 표시된 본문 부분을 byte []로 바꾸려면 어떻게해야합니까?

이전 I 각 문자를 통해 반복하고 바이트 배열 치의 가산 시도 등의 foreach 문자 C에 bytelist.add ((바이트) c)

이렇게하면, I 원본 파일을 비교 바이트 [] 나는 대부분의 문자가 63 (ASCII 코드?)로 대체되었다는 것을 알기 위해 남았습니다. 즉, 127보다 큰 바이트를 덮어 쓸 가능성이 있습니다 (ASCII의 최대 값은 무엇입니까?) 63 대신. 나는 그때 내가 잘못된 인코딩을 사용하고 있다고 추정했지만, UTF8은 얼마나 많은 데이터를 내가 예상 했어야했는지와 비교하여 계산하기가 어려웠다. 또 다른 질문 인 은 UTF8 문자를 얼마나 많이 사용 하는가?

모두에게 감사드립니다!

+0

원시 요청 (문자열로 바뀌 었습니다)에서 png를 다시 만들려고합니까? – LGSon

+0

예, 차례로 ... 인코딩을 사용하면 문자열의 각 문자가 바이트 값을 유지할 수 있으므로 PNG를 다시 만들 수 있습니다. –

+0

'Request.Files' 속성을 사용하여 png 콘텐츠 길이를 확인하고 디스크에 바로 저장할 수 있습니까? – LGSon

답변

0

문제점에 대한 해결책을 찾았습니다. 내 방법 뒤에있는 문제는 각 유니 코드 문자가 다른 바이트와 동일한 바이트 수를 사용했다는 나의 가정이었습니다. 이것은 틀 렸습니다. 그 결과로 수신 된 바이트 수를 영원히 기다리기 위해 기다린 내 while 루프가 발생했습니다.

비슷한 것을 시도하는 사람은 두 번째 바이트 배열로 주어진 구분 기호로 바이트 배열을 분할하는 함수를 작성하여 문제를 해결할 수있었습니다. 이것은 원본 바이트 어레이를 여러 조각으로 나눌 수 있도록 도와주었습니다. 하나는 업로드 된 파일입니다.