2011-11-01 11 views
1

서버에서 약 10M 크기의 파일을 다운로드해야하는 프로젝트에 있습니다. 그리고 직접 URL (https : // serveraddress : port/filepath)을 사용하여 다운로드합니다. 파이어 폭스와 IE9는 괜찮지 만 IE8은 그렇지 않습니다. 비슷한 케이스를 여기서 검색했는데 쿠키 설정에 문제가있는 것으로 보입니다. HTTPS를 통해 파일 다운로드

그래서 나는 다음과 같은 추가 : XHTML의 파일의 머리에

을, 그러나 나는 응답 헤더는 다음과 같이 아직 발견

에서 Pragma 없음 캐시 캐시 제어 노 캐시

다음에 다음을 추가하십시오. response.setHeader ("Cache-Control", "private"); response.setHeader ("Pragma", "public"); response.setHeader ("Expires", "-1"); JSP 파일에

및 BufferedInputStream을와의 BufferedOutputStream가 파일을 읽고 쓸 수 있지만 여전히 작동하지 않는 사용, 그것은

사람이 도움을 줄 수 debug.xhtml 페이지로 리디렉션?

전체 JSP 파일은 다음과 같습니다

 final int DEFAULT_BUFFER_SIZE = 10240; 
try { 
    String fileName = request.getPathInfo(); 
    File fileToDownload = new File(request.getSession().getServletContext().getRealPath("/")+ "installer/" + fileName); 

    if(!fileToDownload.exists()){ 
     response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404. 
     return; 
    } 
    response.setHeader("Cache-Control", "private"); 
    response.setHeader("Pragma", "public"); 
    response.setHeader("Expires", "-1"); 

    response.setHeader("Content-Disposition","attachment; filename=\"" + fileToDownload.getName()+"\""); 
    response.setBufferSize(DEFAULT_BUFFER_SIZE); 
    String contentType = getServletContext().getMimeType(fileToDownload.getName()); 

    if (contentType == null) { 
     contentType = "application/octet-stream"; 
    } 
    response.setHeader("contentType", contentType); 

    response.setHeader("Content-Length", String.valueOf(fileToDownload.length())); 

    BufferedInputStream input = null; 
    BufferedOutputStream output = null; 

    try { 
     input = new BufferedInputStream(new FileInputStream(
       fileToDownload), DEFAULT_BUFFER_SIZE); 
     output = new BufferedOutputStream(response 
       .getOutputStream(), DEFAULT_BUFFER_SIZE); 
     byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 
     int length; 
     int index = 1; 
     while ((length = input.read(buffer)) > 0) { 
      output.write(buffer, 0, length); 
     } 
    } finally { 
     output.close(); 
     input.close(); 
    } 
    System.out.println("finish"); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

"NOT OK"를 정의하십시오. "불만"이란 무엇입니까? – deceze

+0

그냥 작동하지 않는 것을 의미합니다. IE8을 사용하여 파일을 다운로드 할 수 없습니다. – PhoenixCA

+1

IE8에서 * 어떤 일이 일어나고 있습니까? – deceze

답변

0

나는 그것이, IE 버그의 키워드로 구글을 시도 할 생각 "IE의 파일 다운로드 HTTPS 캐시 프라그". 예를 들어 다음과 같은 몇 가지 기사가 있습니다. 예 : http://mark.koli.ch/2009/10/internet-explorer-cant-open-file-via-https-try-removing-the-pragma-header.html, http://support.microsoft.com/kb/323308

+0

두 문장 out.clear()가 누락되었습니다. out = pageContext.pushBody(); 이제는 작동합니다. 여기있는 모든 사람들에게 감사드립니다. – PhoenixCA

관련 문제