....
<servlet>
<servlet-name>FileUpload</servlet-name>
<servlet-class>com.study.FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileUpload</servlet-name>
<url-pattern>/FileUpload.do</url-pattern>
</servlet-mapping>
....
package com.study;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadServlet extends HttpServlet {
public void doPost(HttpServletRequest _request,
HttpServletResponse _response) throws IOException, ServletException {
ServletContext context = this.getServletContext();
String realPath = context.getRealPath("/");
String dirName = realPath + File.separator + "uploadFiles";
File dir = new File(dirName);
if (!dir.exists()) dir.mkdir();
System.out.println("dirName: " + dirName);
File file = null;
try {
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setSizeThreshold(10 * 1024);
dfif.setRepository(dir);
ServletFileUpload upload = new ServletFileUpload(dfif);
upload.setSizeMax(10 * 1024 * 1024);
upload.setHeaderEncoding("EUC-KR");
ArrayList items = (ArrayList) upload.parseRequest(_request);
for (int i=0; i<items.size(); i++) {
FileItem item = (FileItem) items.get(i);
if (item.getFieldName().equals("attachedFile")) {
file = new File(dir, item.getName());
item.write(file);
System.out.println("file saved in " + dir.getPath());
} else {
if (item.getFieldName().equals("desc")) {
System.out.println("desc: " + item.getString());
}
}
}
} catch (Exception _ex) {
System.out.println("Error: " + _ex.getLocalizedMessage());
}
if (file != null) {
String fileName = file.getName();
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1); // 확장자 얻음
String mimeType = "";
// 확장자별 MIME 형식 선택
if (fileExt.equalsIgnoreCase("jpg")) mimeType = "image/jpeg";
else if (fileExt.equalsIgnoreCase("gif")) mimeType = "image/gif";
else if (fileExt.equalsIgnoreCase("ppt")) mimeType = "application/vnd.ms-powerpoint";
else if (fileExt.equalsIgnoreCase("xls")) mimeType = "application/vnd.ms-excel";
else {
mimeType = "application/octet-stream";
_response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
_response.setHeader("Content-Transper-Encoding", "binary");
_response.setHeader("Pragma", "no-cache");
}
_response.setContentType(mimeType); // 선택된 MIME 설정
// 입력 스트림
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream in = new DataInputStream(bis);
// 출력 스트림: 이미지, 파일등은 1byte이므로 스트림형태로 바꿔야 한다.
ServletOutputStream out = _response.getOutputStream();
byte[] data = new byte[1024];
while (true) {
int len = in.read(data, 0, data.length);
if (len <= 0) break;
out.write(data, 0, len);
out.flush();
}
in.close();
out.close();
}
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>File Upload</title>
</head>
<body>
<form name="myForm" method="POST" action="/FileUploadTest/FileUpload.do" enctype="multipart/form-data">
파일 첨부: <input type="file" name="attachedFile"/><br/>
파일 설명: <input type="text" name="desc"/><br/>
<input type="submit" value="파일 업로드"/>
</form>
</body>
</html>