2011-12-07 2 views
1

서블릿에서 데이터베이스의 EML을 읽고 "다운로드 파일"UI를 사용하여 클라이언트에 제공하고 싶습니다. Content-Length 헤더를 지정하면 시작할 때 다운로드하는 데 몇 분이 걸립니다. 내가하지 않으면, 모든 것이 잘 작동하지만 헤더를 설정하고 싶습니다. :) 나는 무엇을 놓치고 있습니까?데이터베이스에서 파일을 제공하는 동안 콘텐츠 길이 지정

// part is javax.mail.Part 
response.setHeader("Content-Disposition", "attachment" + filename); 
response.setContentType(mime); 
response.setContentLength(part.getSize()); // This line causes the problem 
IOUtils.copy(part.getInputStream(), out); 
+0

왜 Content-Length 헤더를 설정 하시겠습니까? HTTP/1.1 클라이언트에는 필요하지 않습니다. –

+0

단지 질문입니다. :) 또한이 필드가 실제로 선택 사항인지 여부는 알 수 없습니다 [RFC2616] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14 .html # sec14.13) – Raffaele

+1

@Mark : 필요한 것은 아니지만 사용자에게 좋을 것이므로 다운로드 완료 및 남은 용량을 확인할 수 있습니다. Content-Length 헤더가 없으면 브라우저는 정보를 얻지 못하고 정보를 표시 할 수 없습니다. – mhaller

답변

2

크기를 얻기 위해 파일을 DB에서 가져와야 할 수도 있습니다. 크기를 열을 분리하여 저장하고 거기에서 값을 제공하십시오. 또한 java.sql.Blob을 통해 파일 인 DB와 함께 작업해야합니다.

샘플에는 불행하게도 부품 객체를 가져 오는 정보가 없습니다.

+0

전체 DB를 DB에 저장했습니다. 런타임에 MimeMessage를 재구성하고 서블릿 응답에 요청 된 Part를 작성합니다. – Raffaele

+0

파트의 크기는 얼마입니까? 당신이 전체를 검색하는 데 몇 분이 걸릴 것으로 예상되는 것이 있습니까? – jbindel

+0

부품은 일반적으로 3-400KB를 차지하는 일부 pdf를 제외하고는 몇 바이트입니다. Content-Length가 없으면 (로컬 호스트에서 테스트 중이므로) 즉시 다운로드가 완료되므로 문제는 그 값과 같을 것입니다. Part javadoc에서 getSize()는 정확한 크기가 아닌 추정치를 반환하도록 설계되었으므로 브라우저 실패로 보일 수 있지만 모든 브라우저에 영향을줍니다. – Raffaele

관련 문제