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