현재 원시 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 문자를 얼마나 많이 사용 하는가?
모두에게 감사드립니다!
원시 요청 (문자열로 바뀌 었습니다)에서 png를 다시 만들려고합니까? – LGSon
예, 차례로 ... 인코딩을 사용하면 문자열의 각 문자가 바이트 값을 유지할 수 있으므로 PNG를 다시 만들 수 있습니다. –
'Request.Files' 속성을 사용하여 png 콘텐츠 길이를 확인하고 디스크에 바로 저장할 수 있습니까? – LGSon