본문 바로가기
Spring/Spring Muzi

e7e샘의 파일 업로드 원본

by 미눅스[멘토] 2023. 8. 1.
728x90

Filter  와 inter Septer의 차이

 

 

Filter  톰캣과 스프링 사이에 껴있음

 

 

톰캣 8.대부터 파일업로드 쉽게 지원이된다

 

서블릿 3.0(톰캣8) 이상 부터 추가 라이브러리 없이 Multipart 설정 지원

web.xml

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
        <!-- 요기 추강   5M  1024*1024* 5 -->
		<multipart-config>
             <location>D:\temp</location>
			<max-file-size>209715200</max-file-size>
			<max-request-size>209715200</max-request-size>
			<file-size-threshold>0</file-size-threshold>
		</multipart-config>
	</servlet>

 

MultipartParser 설정(Multipart 해석)

servlet-context.xml

	<beans:bean id="multipartResolver"  class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>

 

이클립스에서 파일을  이클립스가 임시 실행환경의 폴더에 올려서 파일 업로드가 늦게 반영되는 문제

(실제 배포용 war 파일로 맹글어서  테스트하면 전혀 문제 없음)를 억지로 대응해보깅

mklink는 관리자 권한으로 실행해야 함!

mklink /d ckUpload D:\myworkspace2\SiteMesh2\src\main\webapp\resources\ckUpload

 

서버를 클린하면 바로 가기를 다시 설정해 줘야 하는 불편함이 있음!

 

Controller 1개 맹글로 그 안에 요따구로  그냥 괘니...

	@GetMapping("/oho/mulfile")
	public String getFiles() {
		log.info("체킁::");
		return "jsp/mulfile";
	}

	@PostMapping(value = "/oho/mulfile",produces = "application/json;charset=utf-8")
	@ResponseBody
	public List<String> postFiles(MultipartHttpServletRequest request) throws IllegalStateException, IOException {
		ServletContext context=  request.getSession().getServletContext();
		String realPath= context.getRealPath("/resources/magufiles");
		log.info("체킁:"+ realPath);
		
		log.info("KGB: " + request.getParameter("aaa"));
		List<MultipartFile> fileList =request.getFiles("upload");
		List<String> pathList = new ArrayList<String>();
		List<File> fList = new ArrayList<File>();
		for (MultipartFile multipartFile : fileList) {
			fList.add(convert(multipartFile));
			log.info("이름: " + multipartFile.getOriginalFilename());
			log.info("사이즈: " + multipartFile.getSize());
			multipartFile.transferTo(new File(realPath + "/" + multipartFile.getOriginalFilename()));
			pathList.add("/resources/magufiles/"+ multipartFile.getOriginalFilename());
		}
		return pathList;
		//return fList;
	}

 

mulfile.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <div id="disp" style="height:300px;border:5px solid black">
    </div>
    
	<form  id="myForm" action="/basic/oho/mulfile" method="post"  enctype="multipart/form-data">
		<input type=text name="aaa" value="merong"><br>
		<input type=file name="upload" multiple="multiple" value="">
		<input type="button" value="떤쏭" onclick="f_send()">
	</form>
	
<script type="text/javascript">
const disp = document.querySelector("#disp");
function f_send(){
	var xhr = new XMLHttpRequest();
	var formData = new FormData(myForm);
	var files = document.querySelector("input[name=upload");

	for(var i=0; i<files.length; i++){
		formData.append("upload",files.files[i]);
	}

	xhr.open("post","/basic/oho/mulfile",true);
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4 && xhr.status == 200){
			
			console.log(xhr.responseText);
			
			/*
			console.log(xhr.responseText);
			
			history.pushState(null, "");
			
			let paths = JSON.parse(xhr.responseText);
			for(path of paths){
				let aTag = document.createElement("a");
				aTag.href = "/basic/"+path;
				aTag.target = "_blank";
				aTag.innerHTML=path.substr(path.lastIndexOf("/")+1); 
				disp.appendChild(aTag);
			}	
			*/
		}
	}
	xhr.send(formData);
}
</script>

</body>
</html>

서블릿 3.0(톰캣8) 이상 부터 추가 라이브러리 없이 Multipart 설정 지원

web.xml

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
        <!-- 요기 추강   5M  1024*1024* 5 -->
		<multipart-config>
             <location>D:\temp</location>
			<max-file-size>209715200</max-file-size>
			<max-request-size>209715200</max-request-size>
			<file-size-threshold>0</file-size-threshold>
		</multipart-config>
	</servlet>

 

MultipartParser 설정(Multipart 해석)

servlet-context.xml

	<beans:bean id="multipartResolver"  class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>

 

이클립스에서 파일을  이클립스가 임시 실행환경의 폴더에 올려서 파일 업로드가 늦게 반영되는 문제

(실제 배포용 war 파일로 맹글어서  테스트하면 전혀 문제 없음)를 억지로 대응해보깅

mklink는 관리자 권한으로 실행해야 함!

mklink /d ckUpload D:\myworkspace2\SiteMesh2\src\main\webapp\resources\ckUpload

 

서버를 클린하면 바로 가기를 다시 설정해 줘야 하는 불편함이 있음!

 

Controller 1개 맹글로 그 안에 요따구로  그냥 괘니...

	@GetMapping("/oho/mulfile")
	public String getFiles() {
		log.info("체킁::");
		return "jsp/mulfile";
	}

	@PostMapping(value = "/oho/mulfile",produces = "application/json;charset=utf-8")
	@ResponseBody
	public List<String> postFiles(MultipartHttpServletRequest request) throws IllegalStateException, IOException {
		ServletContext context=  request.getSession().getServletContext();
		String realPath= context.getRealPath("/resources/magufiles");
		log.info("체킁:"+ realPath);
		
		log.info("KGB: " + request.getParameter("aaa"));
		List<MultipartFile> fileList =request.getFiles("upload");
		List<String> pathList = new ArrayList<String>();
		List<File> fList = new ArrayList<File>();
		for (MultipartFile multipartFile : fileList) {
			fList.add(convert(multipartFile));
			log.info("이름: " + multipartFile.getOriginalFilename());
			log.info("사이즈: " + multipartFile.getSize());
			multipartFile.transferTo(new File(realPath + "/" + multipartFile.getOriginalFilename()));
			pathList.add("/resources/magufiles/"+ multipartFile.getOriginalFilename());
		}
		return pathList;
		//return fList;
	}

 

mulfile.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <div id="disp" style="height:300px;border:5px solid black">
    </div>
    
	<form  id="myForm" action="/basic/oho/mulfile" method="post"  enctype="multipart/form-data">
		<input type=text name="aaa" value="merong"><br>
		<input type=file name="upload" multiple="multiple" value="">
		<input type="button" value="떤쏭" onclick="f_send()">
	</form>
	
<script type="text/javascript">
const disp = document.querySelector("#disp");
function f_send(){
	var xhr = new XMLHttpRequest();
	var formData = new FormData(myForm);
	var files = document.querySelector("input[name=upload");

	for(var i=0; i<files.length; i++){
		formData.append("upload",files.files[i]);
	}

	xhr.open("post","/basic/oho/mulfile",true);
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4 && xhr.status == 200){
			
			console.log(xhr.responseText);
			
			/*
			console.log(xhr.responseText);
			
			history.pushState(null, "");
			
			let paths = JSON.parse(xhr.responseText);
			for(path of paths){
				let aTag = document.createElement("a");
				aTag.href = "/basic/"+path;
				aTag.target = "_blank";
				aTag.innerHTML=path.substr(path.lastIndexOf("/")+1); 
				disp.appendChild(aTag);
			}	
			*/
		}
	}
	xhr.send(formData);
}
</script>

</body>
</html>

'Spring > Spring Muzi' 카테고리의 다른 글

외부강사님 교육  (0) 2023.08.26
Spring Controller(콘트롤러) 주고받는 방식  (0) 2023.08.02
tiles-config.xml(설정파일)  (0) 2023.07.31
root-context.xml(설정파일)  (0) 2023.07.31
log4j.xml(설정파일)  (0) 2023.07.31