2012-07-13 1 views
2

서블릿에 대한 도움이 필요합니다.HttpInputStream에서 요청 헤더를 제거하는 방법

하나의 요청으로 inputStream을 읽고 tiff 파일을 작성해야합니다. inputStream은 요청 헤더를 가지고 있으며 바이트를 어떻게 제거하고 파일 만 쓰는지는 모른다.

쓰기 파일에서 초기 바이트를 참조하십시오.

-qF3PFkB8oQ-OnPe9HVzkqFtLeOnz7S5Be 
Content-Disposition: form-data; name=""; filename="" 
Content-Type: application/octet-stream; charset=ISO-8859-1 
Content-Transfer-Encoding: binary 

나는 그것을 제거하고 tiff 파일에서 바이트 만 쓰고 싶습니다. 추신 : 파일의 보낸 사람은 내가 아니야.

답변

1

아파치 평민은 검색에 사용하는 키워드를 알 필요가 ... 문제의 90 %를 해결 :)
이 을 "다중 요청을 구문 분석"및 난는 getInputStream()를 이용하여 바이트 [완충액을 사용하여 'BufferedInputStream을'을 읽어 엉 http://www.oreillynet.com/onjava/blog/2006/06/parsing_formdata_multiparts.html

int boundaryIndex = contentType.indexOf("boundary="); 
byte[] boundary = (contentType.substring(boundaryIndex + 9)).getBytes(); 

ByteArrayInputStream input = new ByteArrayInputStream(buffer.getBytes()); 
MultipartStream multipartStream = new MultipartStream(input, boundary); 

boolean nextPart = multipartStream.skipPreamble(); 
while(nextPart) { 
    String headers = multipartStream.readHeaders(); 
    System.out.println("Headers: " + headers); 
    ByteArrayOutputStream data = new ByteArrayOutputStream(); 
    multipartStream.readBodyData(data); 
    System.out.println(new String(data.toByteArray()); 

    nextPart = multipartStream.readBoundary(); 
} 
1

HttpServletRequest의 getInputStream() 메서드를 사용하여 헤더없이 내용을 가져 오는 이유가 확실하지 않습니다. 입력 스트림을 읽기 시작하고 두 개의 연속 CRLF를 찾을 때까지 내용을 무시할 수있는 옵션이 있습니다. 헤더의 끝을 정의합니다.

그 일을하는 한 가지 방법은 다음과 같이이다 :

String headers = new java.util.Scanner(inputStream).next("\\r\\n\\r\\n"); 
// Read rset of input stream 
+0

하지만 inputStream을 헤더에 온다 구글 말한다. 내가 사용하려고 시도합니다 java.util.Scanner –

+0

내가 tryed 스캐너. help-me에서 "\\ r \\ n \\ r \\ n"이 (가)있는 첫 번째 줄을 제거하지만 내 tiff가 작동하지 않습니다. 내 inputStream이 모든 요청 본문이라고 생각합니다. 스트림의 기록 된 파일의 마지막 행에는 첫 번째 줄 "-qF3PFkB8oQ-OnPe9HVzkqFtLeOnz7S5Be"와 동일한 코드가 있습니다. 그것이 있었다면, 나는 단지 몸으로 스트림을 읽고 몸에서 내 파일 바이트를 얻는 법을 배울 필요가 있습니다. –

+0

ty man, ur 답변 도움 - 해결책 찾기 :) –