본문 바로가기
JSP

23.01.20 file Upload / Download

by SoulMania 2023. 1. 30.

1. Upload

 

  - 요청주소

http://localhost/webPro/fileUpDown/uploadFrm01.jsp

 

 - 파일 업로드 위치

C:\file_repo

 

 - 기능 동작 페이지

 

요청주소로 이동

 

이름 : test, 비밀번호 : 1234, 파일선택 클릭하여 원하는 사진 선택

 

해당 위치에 파일이 저장 된 결과(위에 폼에서 선택하여 업로드한 사진들이 저장위치 폴더에 전송된 결과)

 

웹상으로 업로드 후 결과 출력

 - 해당 기능 구현 소스 (upload.jsp)

 

(jsp 페이지네 스크립틀릿 내에 코딩)

 

---->> 파일 처리 구문

 <%
  /*DiskFileItemFactory클래스: 업로드되어진 파일을 저장할 저장소와 관련된 클래스
  ServletFileUpload클래스 : 업로드된 파일 및 파라미터에 대한 정보를 가져와
                                                파일업로드, 파라미터 값 가져오기 */
 
  request.setCharacterEncoding("utf-8");
 
  File currentDirPath = new File("C:\file_repo");
  DiskFileItemFactory factory = new DiskFileItemFactory();
  factory.setRepository(currentDirPath);//파일저장할 디렉토리set
  factory.setSizeThreshold(1024*1024);//최대업로드 가능 파일사이즈set
  
  ServletFileUpload upload = new ServletFileUpload(factory);
  
  List<FileItem> items = upload.parseRequest(request);
  for(int i=0; i<items.size() ;i++){
  
  FileItem fileItem = (FileItem)items.get(i);
  
  if(fileItem.isFormField()){ //폼필드라면
  out.print(fileItem.getFieldName()+" : "); //브라우저출력
  out.print(fileItem.getString("utf-8")+"<br/>"); //=> 향후 DB에 저장되어야 하는 DATA
  System.out.println(fileItem.getFieldName()+" : "+fileItem.getString("utf-8")); //콘솔출력
  }else{//폼필드가 아니라면
  out.print("<p>-------------------------</p>");
  
  //브라우저출력-파일명/파일크기 => 향후 DB에 저장되어야 하는 DATA
  out.print(">>"+(i-1)+"번째 파일");
  out.print("<br/> -파라미터(변수명) : "+fileItem.getFieldName());
  out.print("<br/> -파일명 : "+fileItem.getName());
  out.print("<br/> -파일크기 : "+fileItem.getSize()+"<br/><br/>");
  
   //콘솔출력
  System.out.println("파라미터(변수명) :"+fileItem.getFieldName()+
                 "/파일명 :"+fileItem.getName()+
                 "/파일크기 :"+fileItem.getSize());
  
  }//if
  
  }//for
 %>

 

---------------------------------------------------------------------------------------------

 

2. Download

 

 - 요청주소

http://localhost/webPro/fileUpDown/downloadFrm01.jsp

 

 - 파일 다운로드 위치

C:\file_repo

 

 - 기능 동작 페이지

요청주소로 이동
download 버튼을 누름으로써 jsp 페이지에서 선택한 그림 파일들을 해당 위치에 다운로드
해당 경로에 다운로드 된 그림 파일

 - 해당 기능 구현 소스(downloadFrm01.jsp)

 

<body>
 <h3>Download</h3>
 <form name="frm1" id="frm1" method="post" action="download.jsp">

<%--  download.jsp 페이지로 보낼 그림 파일 이름과 값--%>
  <input type="hidden" name="df1" value="1.png"/>
  <input type="hidden" name="df2" value="2.png"/>
  <input type="hidden" name="df3" value="3.png"/>
  <input type="submit" value="download"/>
 </form>
</body>

 

 

 - 해당 기능 구현 소스(download.jsp)

 

<% //download.jsp
 request.setCharacterEncoding("utf-8");
 
 %>
 <c:set var="df1"  value="${param.df1}"/>
 <c:set var="df2"  value="${param.df2}"/>
 <c:set var="df3"  value="${param.df3}"/>
 
 *<c:out value="${df1}"/> <br/>
 *<c:out value="${df2}"/> <br/>
 *<c:out value="${df3}"/> <br/><br/><br/>

 <c:if test="${not empty df1}"> 
 <img 
  src="<%=request.getContextPath()%>/download.dong?fileName=${df1}" 
  class="c1"/>
 </c:if>
 <br/><br/>

 <c:if test="${not empty df2}"> 
 <img 
  src="<%=request.getContextPath()%>/download.dong?fileName=${df2}" 
  class="c1"/>
 </c:if>
 <br/><br/>

 <c:if test="${not empty df3}"> 
 <img 
  src="<%=request.getContextPath()%>/download.dong?fileName=${df3}" 
  class="c1"/>
 </c:if>
 <br/><br/>

 

 - 해당 기능 구현 소스(FileDownload.java)

 

@WebServlet("/download.dong") ---> 어노테이션 사용
public class FileDownload extends HttpServlet {
private static final long serialVersionUID = 1L;
       
   
public void init(ServletConfig config) throws ServletException {
System.out.println("init()호출-최초 1회만 호출");
}

public void destroy() {
System.out.println("destroy()호출");
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
process(request,response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
process(request,response);
}

private void process(HttpServletRequest request, HttpServletResponse response) throws IOException {
//파라미터받기
String fileName= request.getParameter("fileName");

//비즈니스로직 //Model //View     ---->> 파일 처리 구문
OutputStream out = response.getOutputStream();
String file_repo = "C:\\file_repo"; //저장소

String downFile = file_repo+"\\"+fileName;
File file = new File(downFile);

response.setHeader("Cache-Control", "no-cache");
response.setHeader("Content-disposition", 
           "attachment; fileName="+fileName);
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024*8];
while(true) {
int cnt = fis.read(buffer);
if(cnt==-1) {break;}
out.write(buffer,0,cnt);
}//while끝

fis.close();
out.close();

}

}



</body>