JSP 5일차 : 파일업로드

JSP 파일업로드

  1. http://www.servlets.com/cos/ 에서 cos~ 에 관한 파일을 다운받은후 압축을 풀고 cos.jar 파일을 WEB-INF 의 lib 폴더에 넣는다

  2. 폼을 만들때는 반드시 폼태그 속성을 이렇게 주자

    method="post" enctype="multipart/form-data" 
    
  3. 파일이 저장되는 실제 경로 구하기

    ServletContext context=getServletContext();
    realfolder=context.getRealPath(savefolder);
    
  4. MultipartRequest 라는 클래스를 사용

    생성자 (request,fileDirectory(업로드할 경로),1024*5(업로드할 파일의 크기), "euc-kr"(한글타입) , new DefaultFileRenamePolicy())
    
  5. 주요 메소드

    1) getParameterNames() : input 타입의 name들을 반환 (반환값:Enumeration)

    2) getParameter(“name”) : name 에 해당하는 value 값 반환

    3) getFileNames() : input 타입에서 속성이 file 로 된 이름들을 반환(반환값:Enumeration)

    4) getFilesystemName(name) : 실제 업로드된 파일명(동일한이름일경우 변경된 이름반환

    5) getOriginalFileName(name) : 변경되기 전의 원래 파일명

    6) getFile(name) : File 타입 리턴(파일 크기등을 알아볼수 있다)

fileUploadForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
  </head>
  <body>

    <h2>JSP업로드 연습 - 이미지 업로드</h2>
    <form action="Ex1_fileUploadAction.jsp" method="post" enctype="multipart/form-data">
      이름 : <input type="text" name="name"><br>
      제목 : <input type="text" name="subject"><br>
      이미지 : <input type="file" name="uploadfile" ><br>

      <input type="submit" value="submit" >
    </form>
  </body>
</html>

fileUploadAction.jsp

<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>이미지 업로드 연습</title>
  </head>
  <body>
    <%
    int fileSize = 1024*1024*3; //3mb로 파일 크기를 제한 
    ServletContext context = getServletContext();
    String uploadPath = context.getRealPath("/save");
    %>
    업로드 경로 확인 : <%=uploadPath %><br>
    <%
    MultipartRequest multi = null;

    try{
      multi = new MultipartRequest(request, uploadPath, fileSize, "UTF-8",new DefaultFileRenamePolicy());
      String name = multi.getParameter("name");
      String subject = multi.getParameter("subject");
      String originalFile = multi.getOriginalFileName("uploadfile");
      String uploadFile = multi.getFilesystemName("uploadfile");
      %>
    <h1>읽어온 데이타 출력하기</h1>
    이름 : <%=name %><br>
    제목 : <%=subject %><br>
    오리지날 파일명 : <%=originalFile %><br>
    실제 업로드된 파일명 : <%=uploadFile %><br><Br>
    <h3>업로드된 파일 불러오기</h3>
    <img src="../save/<%=uploadFile %>">
    <%
    }catch(Exception e){
      out.write("업로드 용량 오류 또는  이외..." + e.getMessage());
    }

    %>

</body>
</html>

filePreview.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <head>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    </head>

  </head>
  <body>

    <hr>
    <input type="button" value="업로드 폴더 초기화!" onclick="location.href='Ex1_fileDelete.jsp'">
    <hr>


    <form action="Ex1_fileUploadAction.jsp" method="post" enctype="multipart/form-data">
      이름 : <input type="text" name="name"><br>
      제목 : <input type="text" name="subject"><br>
      이미지 : <input type="file" name="uploadfile" onchange="readURL(this);"><br>
      <img id="blah" src="http://placehold.it/180" alt="your image" style="width:100px" /><br>

      <input type="submit" value="submit" >
    </form>

    <script>

      function readURL(input) {
        if (input.files && input.files[0]) {
          var reader = new FileReader();

          reader.onload = function (e) {
            $('#blah')
              .attr('src', e.target.result);
          };

          reader.readAsDataURL(input.files[0]);
        }
      }
    </script>

  </body>
</html>

fileDelete.jsp

<%@page import="java.io.File"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
  </head>
  <body>

    <%
    ServletContext context = getServletContext();
    String uploadPath = context.getRealPath("/save");
    File file = new File(uploadPath);
    File files[] = file.listFiles();
    if(files!=null && files.length>0){
      for(File f:files){
        %>
    <%=f.getName() %>(<%=f.isDirectory()?"디렉토리":"파일" %>)<br>
    <
    }

    for(File f:files){
      f.delete();
    }%>
    <h3><%=files.length %>개의 파일 삭제 완료!</h3>
    <%
    }else{
      %>
    <h3>삭제할 파일이 없음.</h3>
    <%
    }
    %>

    <a href="javascript:history.back();">이전으로 돌아가기</a>

  </body>
</html>

Categories:

Updated:

Comments