낭만 프로그래머
Ajax 와 Servlet 을 이용한 파일 업로드 본문
자료를 찾아보면 Spring을 이용한 파일 업로드가 대다수 이며 오렐리에서 제공하는 라이브러리가 주를 이룬다.
Spring은 사용하기 싫고 오렐리에서 제공하는 라이브러리는 몇가지 버그가 있는 듯 하다. ㅜㅜ
그래서 찾은 것이 commons-fileupload 라이브러리를 이용하는 것이다.
1. commons-fileupload 와 commons-io 라이브러리를 다운로드
commons-fileupload : http://commons.apache.org/proper/commons-fileupload/
commons-io : http://commons.apache.org/proper/commons-io/
2. Ajax 및 Html 소스
function createNewsAndEvents(e) {
e.preventDefault();
var frm = document.getElementById('createNewsAndEventsForm');
frm.method = 'POST';
frm.enctype = 'multipart/form-data';
var fileData = new FormData(frm)
jQuery.ajax({
type: "POST",
enctype: 'multipart/form-data',
cache: false,
url: 'restapi/createNewsAndEvents.do',
data: fileData,
async: false,
contentType : false,
processData : false,
dataType: 'json',
success: function(msg) {
jQuery('#createNewsAndEventsForm')[0].reset(); //폼내용 삭제
},
fail: function() {
;
}
});
}
<div id="createWindow">
<div>
<form id="createNewsAndEventsForm" method="post" enctype="multipart/form-data" >
<div class="form-group">
<label for=enTitle>영문 제목</label>
<div>
<input id="enTitle" name="enTitle">
</div>
</div>
<div class="form-group">
<label for=files>이미지</label>
<div>
<input name="files" id="files" type="file" />
</div>
</div>
<div>
<button onClick="createNewsAndEvents(event)" >생성</button>
</div>
</form>
</div>
</div>
3. Servlet 소스
private void createNewsAndEvents(HttpServletRequest req, HttpServletResponse resp) throws Exception {
req.setCharacterEncoding("UTF-8");
Map datas = new HashMap();
// 파일 관련 start
String tempStorePath = "c:/temp";
String storePath = "c:/store";
try {
DiskFileItemFactory diskFactory = new DiskFileItemFactory();
diskFactory.setSizeThreshold(4096); //업로드시 사용할 임시 메모리
diskFactory.setRepository(new File(tempStorePath)); //임시저장폴더
ServletFileUpload upload = new ServletFileUpload(diskFactory);
upload.setSizeMax(100 * 1024 * 1024); //100MB : 전체 최대 업로드 파일 크기
@SuppressWarnings("unchecked")
List<FileItem> items = upload.parseRequest(req);
Iterator iter = items.iterator();
while(iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if(item.isFormField()){ //파일이 아닌경우
String fieldName = item.getFieldName();
String fieldValue = item.getString("UTF-8");
}
else { //파일인 경우
if (item.getSize() > 0) {
String newFileName = UUID.randomUUID().toString();
String name = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
long fileSize = item.getSize();
Path newFilePath = Paths.get(storePath+"/"+newFileName);
File uploadedFile = newFilePath.toFile();
item.write(uploadedFile); //파일 저장
}
}
}
}
catch(Exception e) {
;
}
}
'Java > Common' 카테고리의 다른 글
Java POI 를 이용하여 Excel 파일 생성 및 쓰기 (0) | 2021.12.27 |
---|---|
Java에서 Digester 를 사용하여 XML 파싱을 간단하게 사용하기 (0) | 2020.09.21 |
Java에서 slf4j + Log4j 2 사용하기 (0) | 2020.04.06 |
Java 에서 Singleton(싱글톤) 사용하기 (0) | 2020.04.06 |
Java(JSP/Servlet)에서 다국어(i18n) 사용하기 (0) | 2020.04.03 |