본문 바로가기

web/JSP

jsp 파일 다운 로드

파일 업로드가 끝낫으니 이번엔 파일 다운로드!! 
- 한글경로,한글이름으로 된 파일도 됩니다.
- 콘솔창으로 파일경로,이름,파일용량이 표시됩니다. 
- 버그가 있는데...어떤경우에 에러가 나는지를 모르겟네요. 혹시 알아내시면 댓글좀....
- 한글일 경우 크롬에선 안되는...-0- 아무리 해도 무슨 이유인지를 모르겟네요..

1. 찾아보기로 파일을 선택, 전송을 눌르면 해당 파일을 다운 받을수 있습니다. (뭐....자기 컴터에서 옮기는거죠..;; 단순하게 jsp를 통해서 옮기는거라 여기시면 됩니다.)

2. 시작이 localhost 로 되어 있꾼요.


filedownview.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>파일 다운</title>
</head>

<body>
<form name="down" action="filedown.jsp" method="post" >
<input type=file name="downfilename" size=40>
<input type="button" value="전송" onclick="down.submit()">
</form>
</body>
</html>

-file을 위한 페이지 입니다. 선택파일과 경로를 알기위해서 필요한 페이지 입니다.


filedown.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.io.BufferedOutputStream"%>
<%@ page import="java.io.FileInputStream"%>
<%@ page import="java.io.BufferedInputStream"%>
<%@ page import="java.io.File"%>
<%

 request.setCharacterEncoding("EUC-KR");
 response.setCharacterEncoding("EUC-KR");
 response.setContentType("text/html;charset=EUC-KR"); 
 
 String filename = request.getParameter("downfilename");

 File file = new File(filename);
 
 System.out.println(filename);
 System.out.println(file.getAbsoluteFile());
 System.out.println(file.length());
 
 byte b[] = new byte[(int)file.length()];
 if(file.length() > 0 && file.isFile()){ 
  response.setContentType("application/x-msdownload");
  response.setHeader("Content-Disposition", "attachment;filename="+ file.getName() + ";");  
  
  BufferedInputStream input = new BufferedInputStream(new FileInputStream(file));
  BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream());
  int read = 0;
  try{
   while((read = input.read(b)) != -1){
    output.write(b, 0, read);
   }
   output.close();
   input.close();
   out.clear();
   out = pageContext.pushBody();
   
  }catch(Exception e){
   System.out.println("에러메세지: " + e.getMessage());
  }finally{
   if(output != null){output.close();}
   if(input != null){input.close();}
  }
 }else{
%>
<script>
alert("파일이 존재 하지 않습니다.");
self.close();
</script>
<%
 }
%>

-한글을 위해서 request,response 에 euc-kr 을 설정,
-파라미터로 받은 값으로 파일 객체를 만든다음 byte 배열에 담아서 버퍼를 통해 뿌리는것을 볼수 있습니다. 
-파일명이 한글일 경우 깨질수도 있씁니다. (몇줄 더 쓰면 되겟는데..귀찮네요..)