- 파일 업로드
- 웹 하드 프로그램을 위한 테이블 생성과 메인 페이지
# 퍼블리싱 기능 해제
퍼블리싱 기능 : 웹 애플리케이션 실행 시, 원본 폴더는 건드리지 않고 복사한 실행용 폴더를 만들어서 사용
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")%> </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>