request 타입 에러를 해결하고 나서
form 태그에 enctype="multipart/form-data" 추가하고
servlet-context.xml에 multipartResolver도 등록되었다.
스프링 파일업로드는 편리하게도
File file = new File(경로,파일이름);
한 뒤에
request.getFile("파라미터이름").transferTo(file);
만 하면 파일업로드가 되지만
경로를 잡을때 조심해야 한다.
아래는 회원가입 기능을 구현하는 가입 메소드인데
private final static String path = "/resources/uploaded";
public void signinProcess(MultipartHttpServletRequest request){
String id = null;
String password = null;
try {
id = new String(request.getParameter("id").getBytes(),"utf-8");
password = new String(request.getParameter("password").getBytes(),"utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String filePath = request.getSession().getServletContext().getRealPath(path);
String fileName = "default.png";
System.out.println("filePath : " + filePath);
System.out.println("id : " + id +" password : " + password);
if(!request.getFile("photo").isEmpty()){
System.out.println("사진이 존재합니다.");
fileName = id + ".png";
File file = new File(filePath,fileName);
try {
request.getFile("photo").transferTo(file);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("fileName : " + fileName);
}
request.getSession().getServletContext().getRealPath(realPath);
로
realPath 변수의 실제 경로인
D:\dev\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Project01\resources\uploaded\
는 직접 저 폴더로 들어가보면 알지만
존재하지 않아서
FileNotFoundException이 발생하게 된다.
그래서 가져온 실제경로를 가지고 파일이 저장될 경로를 잘 설정하자
필자는
프로젝트 폴더의 webapp/resources/uploaded 아래에 저장되도록
filePath를 수정하였다.
String sep = File.separator;
System.out.println("sep : " + sep);
아 경로 지정할때 \ 은 File.separator로 경로구분자를 가져와서 사용해야한다.
filePath = "C:"+sep+"Users"+sep+"do"+sep+"git"+sep+"Project01"+sep+"src"+sep+"main"+sep+"resources"+sep+"uploaded";
경로 구분자로 filePath를 고쳐주고 다시 폼으로 입력시키면
해당 경로에 파일이 잘 올라온다.