JSP에서 FileDownload 하는 방법
"X"도 약에 쓰려면 없다는 말이 생각 나서 간단하게 포스팅 합니다. JSP에서 FileDownload 하는 방법 입니다. 다른 블로그 예제를 따라해 보니 몇몇 에러들이 발생해서, 좀더 보완해서 올렸습니다. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*"%> <% BufferedInputStream inBuf = null; BufferedOutputStream outBuf = null; try { response.setHeader("Content-Type", "application/octet-stream;"); response.addHeader( "Content-Disposition","attachment; filename=user.csv" ); //jsp outpoutStream clear out.clear(); out = pageContext.pushBody(); inBuf = new BufferedInputStream(this.getClass().getResourceAsStream("/user.csv")); outBuf = new BufferedOutputStream(response.getOutputStream()); //out buffer byte[] data = new byte[1024 * 1024]; int count = 0; while((count = inBuf.read(data)) != -1){ outBuf.write(data); } }catch(Exception e){ e.printStackTrace(); }finally { if(inBuf != null) inBuf.close(); if(outBuf != null) { outBuf.flush(); outBuf.close(); } } %> 유심히 볼 부분은 Bold 처리된 부분들 입니다. out.clear(); 시작해서 2라인은 JSP 자체 OutputStream를 닫고, 새롭게 작성하는 선언 입니다. 그렇지 않을 경우는 "java.lang.IllegalStateException: getOutputStream() has already been called" 에러가 발생 합니다. byte[] data 부분은 예제들을 보니 버퍼 사이즈를 File 총 사이즈 로 선언되어 있더군요... 그럴 경우 메모리를 많이 사용하는 경우가 발생하기 때문에 순수하게 Buffer를 정의하고 사용하는게 좋을 듯 합니다.












