상세 컨텐츠

본문 제목

파일 업로드

스프링

by e7e 2023. 1. 2. 11:41

본문

서블릿 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

 

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

그래서 별로 권장하지 않음, 그래도 굳이 쓰겠다면 바로가기를 만들어 주는

batch 파일을 1개 만들어 보길 권장!

 

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

이해를 돕기위해 MultipartHttpServletRequest를  사용해 봄!!

	@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>

'스프링' 카테고리의 다른 글

외부 파일 맵핑  (0) 2023.02.24
나만의 유튜브(youtube)맹글깅  (0) 2023.02.03
Apache POI  (0) 2022.11.16
STS3(Spring Tool Suite) 설치  (0) 2022.10.20
sitemesh 적용  (0) 2022.10.12

관련글 더보기