Scroll indicator done
728x90

- 파일 업로드

- 웹 하드 프로그램을 위한 테이블 생성과 메인 페이지

 

# 퍼블리싱 기능 해제

퍼블리싱 기능 : 웹 애플리케이션 실행 시, 원본 폴더는 건드리지 않고 복사한 실행용 폴더를 만들어서 사용

Servers > (톰캣 서버 동작 중이면 중지) > Server Options > Server modules without publishing > Ctrl + S

 

[실습1] 파일 업로드

- webhard.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"  import="java.sql.*"%>   

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <style>
        table  { width: 700px; text-align: center; }
        th     { background-color: cyan; }
        
        .left  { text-align: left;  }        
        .right { text-align: right; }

        a:link  { text-decoration: none; color: blue; }
        a:hover { text-decoration: none; color: red;  }
    </style>    
</head>
<body>

<form action="add_file.jsp" enctype="multipart/form-data" method="post">
    업로드할 파일을 선택하세요.<br>
    <input type="file" name="upload"><br>
    <input type="submit" value="업로드">
</form>
<br>

<table>
    <tr>
        <th>파일명     </th>
        <th>업로드 시간</th>
        <th>크기       </th>
        <th>삭제       </th>
    </tr>
    
<%  
   Connection conn = null;
   Statement stmt = null;

// 데이터베이스 연결관련정보를 문자열로 선언
	String jdbc_driver = "com.mysql.jdbc.Driver";
	String jdbc_url = "jdbc:mysql://127.0.0.1/jspdb";
    
    try { 
        Class.forName(jdbc_driver);
    	conn = DriverManager.getConnection(jdbc_url,"jspbook","qweasdzxc0309!");
        stmt = conn.createStatement();
            
        ResultSet rs = stmt.executeQuery("select * from webhard");
        {
            while (rs.next()) {
%>    
            <tr>
                <td class="left">
                    <a href="files/<%=rs.getString("fname")%>">
                        <%=rs.getString("fname")%>
                    </a>
                </td>
                <td><%=rs.getString("ftime")%></td>
                <td class="right"><%=rs.getInt("fsize")%>&nbsp;&nbsp;</td>
                <td><a href="del_file.jsp?num=<%=rs.getInt("num")%>">X</a></td>
            </tr>
<%  
            }
        
    } 
        }
    catch(Exception e) {
    e.printStackTrace();
    }
    
%>    
</table>

</body>
</html>

- File_Upload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ page import="com.oreilly.servlet.MultipartRequest,
                 com.oreilly.servlet.multipart.DefaultFileRenamePolicy,
                 java.io.File" %>
    
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>

<% 
    MultipartRequest multi = new MultipartRequest(
            request,                    // POST 로 전달된 내용을 담은 객체
            application.getRealPath("/UploadFiles"),   // 파일을 저장할 경로
            100 * 1024 * 1024,                   // 최대 파일 크기 (100MB)
            "utf-8",                             // 인코딩
            new DefaultFileRenamePolicy()        // 동일 파일명 처리 방법
    );

    File file = multi.getFile("upload");         // 파일 객체 얻기
    
    if (file == null)
        out.print("파일 업로드 오류!");
    else {
        out.print("File Name : " + file.getName() + "<br>");
        out.print("File Size : " + file.length()  + "<br>");
    }
%>

</body>
</html>

- File_Select.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    
<form action="File_Upload.jsp" method="post" enctype="multipart/form-data">
    업로드할 파일을 선택하세요.<br>
    <input type="file" name="upload"><br>
    <input type="submit" value="업로드">
</form>

</body>
</html>

- del_file.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.File" %>
    
    
<% 
    int num = Integer.parseInt(request.getParameter("num"));

    Connection conn = null;
    Statement stmt = null;

// 데이터베이스 연결관련정보를 문자열로 선언
	String jdbc_driver = "com.mysql.jdbc.Driver";
	String jdbc_url = "jdbc:mysql:// ";
    try { 
    	Class.forName(jdbc_driver);
    	conn = DriverManager.getConnection(jdbc_url," "," ");
        stmt = conn.createStatement();           
        
        // 삭제할 파일의 정보를 읽어오는 쿼리 (파일명을 알기 위해)
        ResultSet rs = stmt.executeQuery(
                "select * from webhard where num=" + num);
     {
        if (rs.next()) {

            // 지정된 파일 삭제
            File file = new File(application.getRealPath("/UploadFiles/") +
                                 rs.getString("fname"));
            if (file.exists()) {
                file.delete();
            }
            
            // DB에서 파일 정보를 삭제
            stmt.executeUpdate(
                    "delete from webhard where num=" + num);
        }

    } 
    }
     catch(Exception e) {
        e.printStackTrace();
    }
    
    response.sendRedirect("webhard.jsp");
%>

- add_file.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>

<%@ page import="com.oreilly.servlet.MultipartRequest,
                 com.oreilly.servlet.multipart.DefaultFileRenamePolicy,
                 java.io.File" %>
<%@ page import="java.time.*" %>

<%
    MultipartRequest multi = new MultipartRequest(
            request,
            application.getRealPath("/UploadFiles"),   // 파일을 저장할 경로
            100 * 1024 * 1024,                   // 최대 파일 크기 (100MB)
            "utf-8",                             // 인코딩
            new DefaultFileRenamePolicy()        // 동일 파일명 처리 방법
    );

    File file = multi.getFile("upload");         // 파일 객체 얻기
    Connection conn = null;
    Statement stmt = null;

 // 데이터베이스 연결관련정보를 문자열로 선언
	String jdbc_driver = "com.mysql.jdbc.Driver";
	String jdbc_url = "jdbc:mysql://   ";
    if (file != null) {
        
        try {
        Class.forName(jdbc_driver);
        conn = DriverManager.getConnection(jdbc_url," ","  ");
                stmt = conn.createStatement();
         {
            // 현재 시간 얻기
            String curTime = LocalDate.now() + " " +
                             LocalTime.now().toString().substring(0, 8);

            // 쿼리 실행
            stmt.executeUpdate(String.format(
                "insert into webhard (fname, ftime, fsize) " +
                "values ('%s', '%s', %d)",
                file.getName(), curTime, (int)file.length()));

            // 메인 페이지로 돌아가기
            response.sendRedirect("webhard.jsp");
            return;

        } 
        }
         catch(Exception e) {
            e.printStackTrace();
        }
    }

%>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>

<script>
    alert('업로드 실패 !');
    history.back();
</script>

</body>
</html>

 

 

728x90