sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | |
sitelink5 | |
sitelink6 |
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class TestFileupload extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final long SIZE_LIMIT = 100000 * 1024 * 1024L; // 업로드 사이즈 제한. 10000M
private static final int TEMP_SIZE_LIMIT = 100 * 1024; // 업로드시 사용할 임시 메모리 제한. 100K
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
/**
* 각 함수는 단 한번씩만 실행 가능하다.
* HTTP request body 는 단 한번만 access(read/parsed) 할 수 있기 때문이다.
*/
procSample1(request, response);
// procSample2(request, response);
// procSample3(request, response);
// procSample4(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
private void procSample1(HttpServletRequest request, HttpServletResponse response) {
System.out.println("업로드 프로세스");
System.out.println("* 업로드 시작");
try {
/** Initialize **/
String contextRealPath = request.getSession().getServletContext().getRealPath("/");
String savePath = contextRealPath + "upfolder";
DiskFileItemFactory factory = new DiskFileItemFactory();
System.out.println("* Factory 취득");
// 바로 디스크에 저장되는 것이 아니라 메모리에 먼저 저장을 해둔다.
factory.setSizeThreshold(TEMP_SIZE_LIMIT); // 임시 업로드할 사이즈를 제한한다.
makeDirs(savePath + "/temp");
factory.setRepository(new File(savePath + "/temp")); // 임시 디렉토리를 지정한다.
ServletFileUpload upload = new ServletFileUpload(factory); // 업로드 객체를 얻는다.
upload.setSizeMax(SIZE_LIMIT); // 최대 업로드 사이즈를 지정한다.
upload.setHeaderEncoding("UTF-8"); // 파일명을 인코딩해준다.
List items = upload.parseRequest(request); // 아이템을 얻는다.
System.out.println("* 아이템을 가져온다");
Iterator iter = items.iterator(); // iterator로 변경한다.
List savedFiles = new ArrayList();
System.out.println("* 아이템에서 파일 추출 및 저장 시작");
try {
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next(); // 아이템 얻기
if (item.isFormField()) { // 파라미터면
String fieldName = item.getFieldName(); // 필드명을 얻는다.
String value = item.getString("UTF-8");
System.out.println("* fieldName=" + fieldName + ", value=" + value);
} else { // 파일이면
if (item.getSize() > 0) {
String name = item.getName(); // 파일명 얻기
String fileName = name.substring(name.lastIndexOf("\\") + 1);// 파일명을 얻는다.
long fileSize = item.getSize(); // 파일 사이즈를 얻는다.
System.out.println("fileName - " + fileName);
System.out.println("fileSize - " + fileSize);
File file = new File(savePath + "/" + fileName); // 기본경로+파일명으로 생성한다.
item.write(file); // 파일 저장.
}
}
} // while
System.out.println("* 아이템에서 파일 추출 및 저장 끝");
} catch (Exception e) {
System.out.println(e);
}
} catch (Exception e) {
System.out.println("에러발생:" + e);
}
}
private void procSample2(HttpServletRequest request, HttpServletResponse response) {
if (ServletFileUpload.isMultipartContent(request)) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) {
// Process form field
String fieldName = item.getFieldName();
String fieldValue = item.getString();
System.out.println("@ " + fieldName + " / " + fieldValue);
} else {
// Process uploaded file
String fieldName = item.getFieldName();
String fileName = item.getName();
InputStream fileContent = item.getInputStream();
System.out.println("# " + fieldName + " / " + fileName);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* parseRequest(request) 호출전에 request.getParameterNames() 또는 request.getParameter() 과 같은 함수로
* HttpServletRequest 객체의 파라미터를 건드리면 모든 파라미터들을 취할 수 없게 된다.
* 때문에 이 테스트 함수는 현재 올바르게 동작하지 않는다.
* @param request
* @param response
* @throws Exception
*/
private void procSample3(HttpServletRequest request, HttpServletResponse response) throws Exception {
Enumeration em = request.getParameterNames();
String paramName = null;
while (em.hasMoreElements()) {
paramName = (String) em.nextElement();
System.out.println(
"param name[" + paramName + "] value[" + request.getParameter(paramName) + "]");
}
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
Iterator iterator = items.iterator();
while (iterator.hasNext()) {
FileItem item = (FileItem) iterator.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
} else {
String fieldName = item.getFieldName();
String szFileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
if (sizeInBytes > 0L) {
File fileTemp = File.createTempFile("tmp", "stg");
item.write(fileTemp);
System.out.println("saved file - "+fileTemp.getAbsolutePath());
}
}
}
}
private void procSample4(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("- (doPost)ContentType : " + request.getContentType());
Collection<Part> parts = request.getParts();
// Check if any of the parts are files.
for (Part part : parts) {
System.out.println("-----------------------------------------------------------------------");
System.out.println("- (doPost)Part.ContentType : " + part.getContentType());
System.out.println("- (doPost)Part.Name : " + part.getName());
System.out.println("- (doPost)Part.SubmittedFileName : " + part.getSubmittedFileName());
System.out.println("- (doPost)Part.Size : " + part.getSize());
System.out.println("-----------------------------------------------------------------------");
if (part.getName().toLowerCase().equals("file")) {
String fpath = "C:/Users/11A/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/jiniebox/upfolder/temp/"
+ part.getSubmittedFileName();
System.out.println("fpath : " + fpath);
part.write(fpath);
}
}
}
private boolean makeDirs(String filepath) {
boolean rtnVal = false;
File f = new File(filepath);
rtnVal = f.mkdirs();
f = null;
return rtnVal;
}
}