package file.mvc.model;
public class FileSet {
public final static String FILE_DIR = "로컬폴더주소";
}
package file.mvc.control;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
import file.mvc.model.FileSet;
@WebServlet("/file/file.do")
public class FileController extends HttpServlet {
private static final long serialVersionUID = 1L;
private String m="";
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
m = request.getParameter("m");
if(m != null) {
m = m.trim();
switch(m) {
case "form": form(request, response); break;
case "upload": upload(request, response); break;
case "list": list(request, response); break;
case "del": del(request, response); break;
case "download": download(request, response); break;
default: list(request, response); break;
}
}else {
list(request, response);
}
}
public void form(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String view = "form.jsp";
response.sendRedirect(view);
}
public void upload(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
File fSaveDir = new File(FileSet.FILE_DIR);
if(!fSaveDir.exists()) fSaveDir.mkdirs();
MultipartRequest mr = new MultipartRequest(request,
FileSet.FILE_DIR,
1*1024*1024,
"utf-8",
new DefaultFileRenamePolicy());
String writer = mr.getParameter("writer");
String fname = mr.getFilesystemName("fname");
String ofname =mr.getOriginalFileName("fname");
System.out.println(
"# writer: "+ writer + ", fname: "+fname+", ofname: " + ofname);
String view = "file.do";
response.sendRedirect(view);
}
public void list(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
File f = new File(FileSet.FILE_DIR);
File kids[] = f.listFiles();
ArrayList<File> fList = new ArrayList<File>();
for(File kid: kids) fList.add(kid);
request.setAttribute("fList", fList);
String view = "list.jsp";
RequestDispatcher rd = request.getRequestDispatcher(view);
rd.forward(request, response);
}
public void del(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String fname =request.getParameter("fname");
if(fname != null) fname = fname.trim();
File f = new File(FileSet.FILE_DIR, fname);
if(f.exists()) f.delete();
String view = "file.do";
response.sendRedirect(view);
}
public void download(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String fname = new String(request.getParameter("fname"));
File file = new File(FileSet.FILE_DIR +"/"+fname);
response.setContentType("application/octet-stream");
String Agent=request.getHeader("USER-AGENT");
if( Agent.indexOf("MSIE") >= 0 ){
int i = Agent.indexOf( 'M', 2 );
String IEV = Agent.substring( i + 5, i + 8 );
if( IEV.equalsIgnoreCase("5.5") ){
response.setHeader("Content-Disposition", "filename=" + new String(fname.getBytes("utf-8"), "8859_1") );
}else{
response.setHeader("Content-Disposition", "attachment;filename="+new String(fname.getBytes("utf-8"),"8859_1"));
}
}else{
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fname.getBytes("utf-8"), "8859_1") );
}
byte b[] = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
OutputStream os = null;
BufferedOutputStream bos = null;
if( file.isFile()){
try{
fis = new FileInputStream(file);//Node
bis = new BufferedInputStream(fis); //Filter
os = response.getOutputStream(); //Node
bos = new BufferedOutputStream(os); //Filter
int read = 0;
while( ( read = bis.read( b ) ) != -1 ){
bos.write(b,0,read);
}
bos.flush();
}catch( Exception e ){
}finally {
try {
if(bis != null) bis.close();
if(bos != null) bos.close();
if(fis != null) fis.close();
if(os != null) os.close();
}catch(IOException ie) {}
}
}
}
}
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Upload Form</title>
</head>
<body>
<center>
<h2>File Upload Form</h2>
<form name="f" method="post" action="file.do?m=upload" enctype="multipart/form-data">
유져: <input type="text" name="writer" size="32"><br/>
파일: <input type="file" name="fname"><br/><br/>
<input type="submit" value="전송">
</form>
</center>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<meta charset='utf-8'>
<center>
<h1>
File List MVC
</h1>
<table border='1' cellpadding='7' cellspacing='2' width='50%'>
<tr>
<th>파일이름</th>
<th>파일크기</th>
<th>삭제</th>
</tr>
<c:if test="${fList.size() == 0}">
<tr>
<td align="center" colspan="3">파일 없음</td>
</tr>
</c:if>
<c:forEach items="${fList}" var="kid">
<tr>
<td align="center">
<a href="file.do?m=download&fname=${kid.name}">${kid.name}</a>
</td>
<td align="center">${kid.length()}</td>
<td align="center"><a href="file.do?m=del&fname=${kid.name}">삭제</a></td>
</tr>
</c:forEach>
</table>
<br/>
<a href="file.do?m=form">업로드 폼</a>
<a href="../index.do">인덱스</a>
</center>
파일 내 세부적인 메소드의 한 줄 한 줄이 어떤 역할을 하는지는 모르겠다. 앞으로 더 연구해보아야 할 연구대상이다. 일단은 이렇게 해서 사용한다는 것을 알아두기만 하면 나중에 잘 사용할 수 있을 것 같다.