java.io.IOException: java.io.FileNotFoundException 오류

임민지·2024년 9월 19일
post-thumbnail


java.io.IOException: java.io.FileNotFoundException: C:\Users\YimMinJi\AppData\Local\Temp\tomcat.8094.10654873818695069196\work\Tomcat\localhost\ROOT\upload_c18d2b4f_f4ec_4a4f_a527_448912ab48cc_00000012.tmp (지정된 파일을 찾을 수 없습니다)

이런 오류가 뜨면 ApiController나, Service를 들여다 봐야한다.

글쓴이 같은 경우는 ApiController에서
// 등록글
@ResponseBody
@PostMapping("/place")
public Map<String, String> createPlace(@ModelAttribute PlaceDto dto, @RequestParam("file") MultipartFile file
) {
Map<String, String> resultMap = new HashMap<String, String>();

    resultMap.put("res_code", "404");
    resultMap.put("res_msg", "장소 등록 중 오류가 발생하였습니다.");
    
    try {
        // 파일이 있을 경우 처리
        if (file != null && !file.isEmpty()) {
            String originalFilename = file.getOriginalFilename();

            if (originalFilename != null && !originalFilename.isEmpty()) {
                String savedFileName = fileService.placeUpload(file);

                if (savedFileName != null) {
                    dto.setOri_pic_name(originalFilename);
                    dto.setNew_pic_name(savedFileName);
                }
            } else {
                resultMap.put("res_msg", "파일 이름이 유효하지 않습니다.");
                return resultMap;
            }
        }

        // 장소 정보 생성
        if (placeService.createPlace(dto, file) > 0) {
            resultMap.put("res_code", "200");
            resultMap.put("res_msg", "장소가 성공적으로 등록되었습니다.");
        } else {
            resultMap.put("res_msg", "장소 등록에 실패하였습니다.");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return resultMap;
}

한번 등록하고, Service에서
// 장소 등록
public int createPlace(PlaceDto dto, MultipartFile file) {
int result = -1;

    // 필수 값 검증
    if (dto.getPlace_name() == null || dto.getPlace_name().isEmpty()) {
        throw new IllegalArgumentException("장소명은 필수 입력 항목입니다.");
    }
    if (dto.getPlace_status() == null || dto.getPlace_status().isEmpty()) {
        throw new IllegalArgumentException("장소 상태는 필수 입력 항목입니다.");
    }
	try {
		// 가장 큰 placeNo 값을 찾아서, 없으면 0을 할당하고, 있으면 +1
      Long maxPlaceNo = placeRepository.findMaxPlaceNo();  // 가장 큰 placeNo 값 찾기
      Long nextPlaceNo = (maxPlaceNo == null) ? 0L : maxPlaceNo + 1;  // 없으면 0, 있으면 +1
		Employee e = employeeRepository.findByempId(dto.getEmp_id());
		
		dto.getMod_date();
		
		 // 파일 업로드 처리
        String newPicName = null;
        String oriPicName = null;
        if (file != null && !file.isEmpty()) {
            oriPicName = file.getOriginalFilename();
            newPicName = fileService.placeUpload(file);  // 파일 업로드
        }
		Place p = Place.builder()
				.placeNo(nextPlaceNo)
				.employee(e)
				.placeName(dto.getPlace_name())
				.placeLocation(dto.getPlace_location()) // 위치
				.placeContent(dto.getPlace_content())  // 설명이 null일 경우 처리
              .placeStatus(dto.getPlace_status())    // 상태
              .placeStarttime(dto.getPlace_start_time()) // 사용 가능 시작 시간
              .placeEndtime(dto.getPlace_end_time())    // 사용 가능 종료 시간
              .unuseableReason(dto.getUnuseable_reason()) // 사용 불가 사유
              .unuseableStartDate(dto.getUnuseable_start_date()) // 사용 불가 시작 날짜
              .unuseableEndDate(dto.getUnuseable_end_date())   // 사용 불가 종료 날짜
              .oriPicName(dto.getOri_pic_name() != null ? dto.getOri_pic_name() : "Default oriPicName")
              .newPicName(dto.getNew_pic_name() != null ? dto.getNew_pic_name() : "Default newPicName")
              .regDate(dto.getReg_date())        // 등록일
              .modDate(dto.getMod_date())        // 수정일
              .build();
		
		placeRepository.save(p);
		result = 1;
	}catch(Exception e){
		e.printStackTrace();
	}
	return result;
}

한번더 등록하려고 해서, 파일을 한번만 등록하면되는데, 두번 등록이 되기때문에 오류가 발생하는거였다.

이럴경우에 선택을 해야한다.
Apicontroller에서 등록을 하게 할것인지,
Service에서 등록을 하게 할것인지 정한 다음에 프로젝트를 진행하면 오류가 해결될것이다.

profile
스마일 :)

0개의 댓글