<%
String change_name = StringUtils.defaultString(request.getParameter("change_name"));
String real_name = StringUtils.defaultString(request.getParameter("real_name"));
//실제 저장소의 파일명
String fileName = "/datas/"+"/"+change_name;
File file = new File(fileName);
int fileSize = (int)file.length();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename="+real_name+";");
response.setContentLength(fileSize);
response.setHeader("Content-Transfer-Encoding", "binary;");
response.setHeader("Pragma", "no-cache;");
response.setHeader("Expires", "-1;");
response.setHeader("Cache-Control", "cache, must-revalidate");
if(fileSize >0 && file.isFile()){
BufferedInputStream fin = new BufferedInputStream(new FileInputStream(fileName));
BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
byte b[] = new byte[fileSize];
int read = 0;
try{
while((read=fin.read(b)) != -1){
outs.write(b,0,read);
}
}finally{
outs.close();
fin.close();
}
}
%>
[출처] [jsp] 파일 다운로드|작성자 샹그릴라
-----------------------------------------------------------------------------------------------
<%@ page contentType="application/unknown; charset=euc-kr" %><%@ page
import="java.util.*,java.io.*"%><%
/* 아파치 톰캣연동 혹은 톰캣 단독으로 쓰일때의 한글 파일 다운로드
*
* 손권남 (kwon37xi_a#T_yahoo.co.kr)
*
* http://www.okjsp.pe.kr에 올라온 많은 예제들을 참고하고, 나름대로
* 경험에 의한 법칙등을 적용하연 만든 것임.
* 이것은 예제일 뿐, 경로나 파일 이름 받아들이는 방법등은 자신에 맞게
* 수정할 것.
*
* 맨위의 charset=euc-kr을 빼먹으면 안된다.!!!!!!
*
* 빼먹을 경우 이 JSP 페이지가 EUC_KR로 해석되지 않아서 이 JSP페이지 내의
* 한글이 모두 깨져버린다. 물론.. 여기서는 한글이 안쓰여서 별 상관은
* 없지만..
*/
/*
* 다운로드 관련 페이지는 Servlet으로 만드는게 원칙이다.
* 이것은 그냥 쉬운 예제를 보여주는 것 뿐이다.
*
* 또한, JSP로 만들 경우에 각 태그 사이에 빈공간이 있어서는 안된다.
* 그럴경우 다운로드되는 파일이 변경될 수 있다. 그러니 그냥 서블릿으로
* 만들기를 권함.
*/
request.setCharacterEncoding("euc-kr");
String filename = request.getParameter("filename");
if (filename == null) {
return;
}
String mime = getServletContext().getMimeType(filename);
if (mime == null) {
mime = "application/octet-stream;";
}
// 자신에게 맞게 수정할 것.
File file =
new File("C:/Program Files/Apache Group/Tomcat 4.1/webapps/ROOT/" + filename);
byte b[] = new byte[2048];
//response.setHeader("Content-Transfer-Encoding", "7bit");
// 위 부분을 아래와 같이 수정함. 2005/01/17
response.setContentType(mime + "; charset=euc-kr");
/*
* URLEncoder의 사용에 주의할것. J2SDK 1.3x 이하에서는
* java.net.URLEncoder.encode(filename) 으로 수정할 것.
*
* MS IE 5.5에는 버그가 있어서 atatchment 부분을 빼줘야한다.
*
*/
if (request.getHeader("User-Agent").indexOf("MSIE 5.5") > -1) {
response.setHeader("Content-Disposition",
"filename=" +java.net.URLEncoder.encode(filename, "euc-kr") + ";");
} else {
response.setHeader("Content-Disposition",
"attachment; filename=" + java.net.URLEncoder.encode(filename, "euc-kr") + ";");
}
/*
* 지금까지 많은 사람들이 한글 파일명을 latin1으로 바꾼뒤 보냈는데,
* 톰캣 단독으로 쓰이는 경우에는 상관없을 수 있지만 아파치등 웹 서버와 연동할 경우
* latin1(8bit) 으로 된 파일이름을 그대로 보내면 한글 파일 이름이 깨진다.
* 아파치가 (혹은 아파치와 톰캣을 연동하는 모듈이) 헤더에서 latin1으로된 문자를
* 자기 맘대로 변형시키는 것으로 보인다.(실제 telnet 으로 접속해서 헤더의
* 파일이름부분을 톰캣단독과 아파치+톰캣 일때 보면 latin1으로 보낼경우에 서로
* 다르게 나온다)
*
* 꼭 URLEncoding을 해서 보내야 언제나 제대로된 한글 이름으로 다운로드가 된다.
*
* 그러나 이것은 모질라에서는 작동하지 않았다.
*
* URLencoding 된 파일이름이 너무 길경우에도 다운로드되지 않는다.
* 모질라에서는 비록 한글파일이름은 깨져도 다운로되 되는것으로 보아
* IE 5.x, 6.x 의 버그로 여겨진다. - 이문제에 대한 해결책 누구 없수?
*/
response.setHeader("Content-Length", "" + file.length() );
if (file.isFile() && file.length() > 0) // 파일 크기가 0보다 커야 한다.
{
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);
}
outs.close();
fin.close();
}
%>
2004/09/13 추가함.
attatchment; 여부에 따라 파일의 다운로드와 플러그인을 통한 열기 여부가 결정된다. attatchment; 를 빼면 몇몇 파일은 브라우저 내부에서 직접 열린다.
2005/10/09 추가함.
한글 파일명 문제는 완전히 해결된 것이라 볼 수 없다.
현재 IE 6.0의 경우에는 무조건 UTF-8로 URLEncoding 해서 출력해야만 했다.
[출처] : http://kwon37xi.egloos.com/1819980
'Jsp_Html' 카테고리의 다른 글
[Jsp] illegal to have multiple occurrences of contentType with different values 에러 (0) | 2011.04.25 |
---|---|
[Jsp] 색상표 (0) | 2011.03.23 |
[Jsp] File Download 2 (0) | 2011.01.28 |
[Jsp] File Download 1 (0) | 2011.01.28 |
[Jsp] page 지시자 (0) | 2010.12.30 |