참조블로그 : https://jamesyleather.tistory.com/401
<!-- 파일 업로드 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<!-- 파일 업로드 기능 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="50000000"></property>
<property name="maxInMemorySize" value="50000000"></property>
</bean>
<input type="file" id="dPics" name="dPics" accept="image/*" multiple="multiple">
@PostMapping("/userInsert")
public String insert(@ModelAttribute DogDTO dogDto,
@ModelAttribute UserDTO userDto,
@ModelAttribute PicDTO picDto,
@RequestParam MultipartFile mainphotofile,
@RequestParam MultipartFile userphotofile,
MultipartHttpServletRequest mtfRequest,//사진 한꺼번에 여러개 받기
HttpServletRequest req)
사진을 여러장 받을때는 MultipartHttpServletRequest 로 받아줘야 한다
//기타 강아지 사진 사진 테이블에 저장
// 각 파일 이름을 저장할 리스트
List<String> picNames = new ArrayList<>();
List<MultipartFile> dPicsFile = mtfRequest.getFiles("dPics");
// 각 파일 이름과 저장된 물리적인 경로를 저장할 맵
Map<String, String> picPaths = new HashMap<>();
// 파일 개수가 3개 이하일 때만 처리
if (dPicsFile != null && dPicsFile.size() <= 3) {
// 파일 이름을 DTO에 저장 및 물리적인 경로에 파일 저장
for (int i = 0; i < dPicsFile.size(); i++) {
String fieldName = "pic" + (i + 1); // 필드 이름 생성 (pic1, pic2, pic3)
MultipartFile file = dPicsFile.get(i);
String fileName;
// 파일이 존재하는 경우 실제 파일 이름 사용, 없는 경우 "-"으로 설정
if (file.isEmpty()) {
fileName = "-";
} else {
fileName = file.getOriginalFilename();
// 파일 이름을 DTO 필드에 저장
switch (fieldName) {
case "pic1":
picDto.setPic1(fileName);
break;
case "pic2":
picDto.setPic2(fileName);
break;
case "pic3":
picDto.setPic3(fileName);
break;
}
try {
ServletContext application = req.getSession().getServletContext();
String path = application.getRealPath("/storage"); // 실제 물리적인 경로
// 파일 경로와 파일명을 올바르게 합쳐서 파일 객체 생성
File targetFile = new File(path, fileName);
// 파일 저장
file.transferTo(targetFile);
// 파일이 정상적으로 저장된 경우 경로를 맵에 저장
picPaths.put(fieldName, targetFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
// 파일 저장 중 오류 발생 시 처리할 내용
}
}
}
}
// 파일 경로 맵 활용 예시
for (Map.Entry<String, String> entry : picPaths.entrySet()) {
System.out.println("Field Name: " + entry.getKey() + ", File Path: " + entry.getValue());
// 파일 경로 출력 또는 다른 작업 수행
}
memberDao.dogPicsInsert(picDto);