fileupload 조건
1) form태그
2) method = "post"
3) enctype = "multipart/form-data"
4) action = "업로드를 처리할 jsp의 url 주소"
5)<input type = "file"..multiple /> => 파일 다중처리할때 사용 ⭐servlert 에서 @MultipartConfig 넣어야함!!
5) 라이브러리 다운
라이브러리 lib 넣기
파일 보내는 jsp
파일 받는 jsp
- 파일 받는 경로 생성
//C드라이브에 upload 폴더
String path = "C:\\upload";
- DiskFileUpload 객체 생성
- 업로드할 파일의 최대 크기 지정
- 메모리 저장할 최대 크기 지정
- 업로드된 파일 임시 저장 경로 지정
//commons - fileupload.jar 안에 해당클래스 있음
DiskFileUpload upload = new DiskFileUpload(); //DiskFileUpload객체 생성
//업로드할 파일의 최대 크기
upload.setSizeMax(5000000); //5Mbyte
//메모리에 저장할 최대 크기
upload.setSizeThreshold(5*4095);//5*1024*1024 : 5Mbyte
//업로드된 파일을 임시로 저장할 경로
upload.setRepositoryPath(path);
- 요청 파라미터 : {filename=파일객체} => request
post 방식으로 전송했기 때문에 값들이 request Header 안에 있음 그래서 request로 하는것 같다.
- FileItem
- 일반 폼데이터 : input type =text,radio,checkbox,textarea,select
- 파일 : input type = "file"
요청URI : fileupload05_process.jsp
요청파라미터 : {name=개똥이,subject=개똥이의 모험,filename=파일객체}
요청방식 : post
//{name=개똥이,subject=개똥이의 모험,filename=파일객체} => request 담겨있음!
List items= upload.parseRequest(request);
Iterator params = items.iterator();
while(params.hasNext()){
FileItem item=(FileItem)params.next();
if(item.isFormField()){ //일반 form데이터 경우
String name = item.getFieldName();//name,subject
String value = item.getString("UTF-8");//개똥이,개똥이 모험
out.print(name + "="+ value+"<br/>");//출력
}else{//file form 데이터 경우
String fileFieldName = item.getFieldName();
String fileName = item.getName();//C:\\users\\picture\\111가1236.jpg
String contentType = item.getContentType();//MIME
long fileSize = item.getSize();
fileName = fileName.substring(fileName.lastIndexOf("\\")+1); //111가1236.jpg
//파일 중복 방지 시작
//java.util.UUID => 랜덤값 생성
UUID uuid = UUID.randomUUID(); //
//sdalfkasdjk_111가1236.jpg
fileName = uuid.toString()+"_"+fileName;
//파일 중복 방지 끝
//계획
File file = new File(path+"\\"+fileName);
//복사 실행
item.write(file);
out.print("===============================<br />");
out.print("요청 파라미터 이름 : " + fileFieldName + "<br />");
out.print("저장 파일 이름 : " + fileName + "<br />");
out.print("파일 콘텐츠 유형 : " + contentType + "<br />");
out.print("파일 크기 : " + fileSize + "<br />");
예시
fileupload05.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="/js/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
//이미지미리보기
//<input type = "file" id="filename" name = "filename"/>
$("input[name='filename']").on("change",handleImg);
function handleImg(e){
//e.target : <input type="file" id="uploadFile" name="filename" />
let files=e.target.files;//파일들
//fileArr = [a.jpg,b.jpg,c.jpg]
let fileArr = Array.prototype.slice.call(files);
//f: 파일오브젝트 1개
fileArr.forEach(function(f){
if(!f.type.match("image.*")){
alert("이미지만 가능합니다.");
return;//handleImg 함수 자체 종료
}
//이미지 맞다면
let reader = new FileReader();
//e: reader가 이미지 객체를 읽는 이벤트
reader.onload=function(e){
let img_html = "<img src ='"+e.target.result+"'style='width:100%'/>";
//<p id ="pImg"></p>
//요소.append : 누적, 요소.html : 새로고침, 요소.innerHTML: JavaScript 에서 새로고침
$("#pImg").append(img_html);
}
reader.readAsDataURL(f); //파일 읽는것
});
}
});
</script>
<title>File Upload</title>
</head>
<body>
<!--
1) form 태그
2) method="post"
3) enctype = "multipart/form-data"
4) action = "업로드를 처리할 jsp의 url 주소"
5)<input type = "file"..(multiple)/> => 파일 다중처리할때
-->
<!--
요청URI : fileupload04_process.jsp
요청파라미터 : {filename=파일객체}
요청방식 : post
-->
<form id="fileForm" name ="fileForm" action="fileupload05_process.jsp" method="post" enctype ="multipart/form-data">
<!-- FileItem, isFormField() : true -->
<p> 이름 : <input type="text" name="name"/></p>
<p> 제목 : <input type="text" name="subject"/></p>
<p id="pImg"></p>
<!-- FileItem : true / isFormField() : false -->
<p>파일 : <input type = "file" id="filename" name = "filename"/></p>
<p><input type = "submit" value="파일올리기"/></p>
</form>
</body>
</html>
fileupload05_process.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@page import="java.io.File"%>
<%@page import="java.util.UUID"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.DiskFileUpload"%>
<!--
요청URI : fileupload05_process.jsp
요청파라미터 : {name=개똥이,subject=개똥이의 모험,filename=파일객체}
요청방식 : post
-->
<%
String path = "c:\\upload";//어디에 업로드할것인지?
DiskFileUpload upload= new DiskFileUpload();
upload.setSizeMax(5000000);//5Mbtye
upload.setSizeThreshold(5*4096); //5Mbtye
upload.setRepositoryPath(path); //임시 저장 경로
//{name=개똥이,subject=개똥이의 모험,filename=파일객체} => request 담겨있음! (post라서)
List items= upload.parseRequest(request);
Iterator params = items.iterator();
while(params.hasNext()){
FileItem item=(FileItem)params.next();
if(item.isFormField()){
String name = item.getFieldName();//name,subject
String value = item.getString("UTF-8");//개똥이,개똥이 험
out.print(name + "="+ value+"<br/>");
}else{
String fileFieldName = item.getFieldName();//filename
String fileName = item.getName();//C:\\users\\picture\\111가1236.jpg
String contentType = item.getContentType();//MIME
long fileSize = item.getSize();
fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
//파일 중복 방지 시작
//java.util.UUID => 랜덤값 생성
UUID uuid = UUID.randomUUID();
//sdalfkasdjk_111가1236.jpg
fileName = uuid.toString()+"_"+fileName;
//파일 중복 방지 끝
//계획
File file = new File(path+"\\"+fileName);
//복사 실행
item.write(file);
out.print("===============================<br />");
out.print("요청 파라미터 이름 : " + fileFieldName + "<br />");
out.print("저장 파일 이름 : " + fileName + "<br />");
out.print("파일 콘텐츠 유형 : " + contentType + "<br />");
out.print("파일 크기 : " + fileSize + "<br />");
}
}
%>
'JAVA > JSP' 카테고리의 다른 글
Cookie (1) | 2024.04.20 |
---|---|
post 보낸 파라미터 확인 방법 (0) | 2024.04.08 |
내장객체 (0) | 2024.04.05 |
디렉티브 태그 (0) | 2024.04.05 |
jsp 방문수 횟수 늘리기 (0) | 2024.04.05 |