down.jsp

JSP 에서 파일을 그냥 링크하면 일부 파일의 경우
깨진 내용이 보이거나 이상하게 반응하게 된다.
특히, 한글로 된 파일의 경우 오동작이 생긴다.
이것을 해결하는 방법으로 별도의 다운로드를 담당하는

JSP를 사용해보자.
톰캣 버젼 등 환경이 다르면 오류가 발생할 수 있음 ^^;

수많은 해결 방법 중에 하나일 뿐이니 참고하기 바람.

-------------------------------------------------------
downtest.jsp : 테스트 할 간단한 파일
-------------------------------------------------------

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<form action="down.jsp" name="form1">
 <% String filename = "새 텍스트 문서.txt";%>
 <input type="hidden" name="file" value="<%=filename%>">
 <a href="#" onClick="form1.submit()">다운로드</a>
</form>

 

-------------------------------------------------------
down.jsp : 다운로드를 담당하는 파일
-------------------------------------------------------

<%@ page contentType="application;" %>
<%@ page import="java.util.*,java.io.*,java.sql.*,java.text.*"%>
<%
 request.setCharacterEncoding("euc-kr"); // request 한글로 설정
 String filename = request.getParameter("file"); // 파일명 받기
 String filename2 = new String(filename.getBytes("euc-kr"),"8859_1");
 ServletContext context = getServletContext(); // 서블릿 컨텍스트 얻기

 /*
 예를 들어 톰캣 설치 폴더가 c:\tomcat41 이고
  c:\tomcat41\webapps\test 가 웹 어플리케이션 일때
  c:\tomcat41\webapps\test\filestorage 폴더에
  파일을 업로드한 경우로 가정한다.
*/

 String saveFolder = "filestorage";

 String realFolder = "";
 realFolder = context.getRealPath(saveFolder); // 상대경로(저장할 폴더)
 
 // 자바 I/O를 이용하여 다운받는다.

 File file = new File(realFolder + "/" + filename);
 byte b[] = new byte[4096];
 response.setHeader("Content-Disposition", "attachment;filename=" + filename2 + ";");


 if (file.isFile())
 {
  BufferedInputStream fin = new BufferedInputStream(new FileInputStream(file));
  BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
  int read = 0;
  while ((read = fin.read(b)) != -1){
   outs.write(b,0,read);
  }//while
  outs.close();
  fin.close();
 }//if
%>


'IT > Language' 카테고리의 다른 글

JDK Bit 확인  (0) 2008.02.11
[JAVA] 숫자,날짜 포메팅하는 방법  (0) 2007.06.29
[JAVA] javac, java 명령어의 옵션  (0) 2007.06.29
[JAVA] 숫자를 화폐단위로 변경  (0) 2007.06.29
[JAVA] 날짜 구하기 팁  (0) 2007.06.29

+ Recent posts