Spring:: input에서 한번에 사진 여러장 받아서 db에 저장하기 (input-multiple)

suragryen·2024년 1월 27일
0

input에서 한번에 사진 여러장 받아서 db에 저장하기 (input-multiple)

참조블로그 : https://jamesyleather.tistory.com/401

  1. pom.xml 추가
<!-- 파일 업로드 -->
		<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>
  1. bean 추가
<!-- 파일 업로드 기능 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="50000000"></property>
		<property name="maxInMemorySize" value="50000000"></property>
	</bean>
  1. HTML input 설정 (multiple)

<input type="file" id="dPics" name="dPics" accept="image/*" multiple="multiple">
  1. Controller
@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);
profile
블로그 이사중 ☃︎

0개의 댓글