내가 작성한 파일첨부 메일 전송 코드는 다음과 같고, FileNotFoundException은 convert 메소드의 try-catch문에서 FileOutputStream 과정에서 발생했다.
public Map sendMail(Map mailparam, MultipartFile multipartFile, String uri) throws Exception {
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
mailparam.forEach((key, value) -> body.add((String) key, value));
if(multipartFile!=null) body.add("files", new FileSystemResource(convert(multipartFile)));
Map resultMap = JsonToMap(sendMail(body, uri));
// 서버 오류
if (...) { throw new Exception("메일전송 에러 발생"); }
return resultMap;
}
// MultipartFile을 File로 변환하는 메소드
private File convert(MultipartFile file) throws IOException {
File convertedFile = new File(file.getOriginalFilename());
try (FileOutputStream fos = new FileOutputStream(convertedFile)) {
fos.write(file.getBytes());
}
return convertedFile;
}
해당 에러가 발생했을 때 해결방법으로 처음 적용했던 방법은 IntelliJ를 관리자 권한으로 실행시킨 것이다.
이 방법은 로컬환경에서는 임시로 해결이 되었으나, 개발과 운영서버에 배포 후에는 다시 같은 에러가 발생하였다.
그 이후, 문제의 FileOutputStream이 있는 convert 메소드를 사용하지 않고 multipartFile.getResource()를 사용하니 액세스 거부없이 파일을 가져올 수 있었다.
public Map sendMail(Map mailparam, MultipartFile multipartFile, String uri) throws Exception {
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
mailparam.forEach((key, value) -> body.add((String) key, value));
if(multipartFile!=null) body.add("files", multipartFile.getResource());
Map resultMap = JsonToMap(sendMail(body, uri));
// 서버 오류
if (...) { throw new Exception("메일전송 에러 발생"); }
return resultMap;
}
'Study > Java' 카테고리의 다른 글
[Java] cannot be cast to java.lang.String 에러 (0) | 2023.08.02 |
---|---|
[Java] 실행 중인 메서드 이름 추출 (0) | 2023.07.27 |
[Java] LocalDate, LocalDateTime 포맷 변경 (0) | 2023.07.27 |
[Java] POI 라이브러리 참고 사이트 (0) | 2023.04.21 |
[Java] 자바 URLEncoder.encode 사용할 때 공백이 '+' 되는 현상 해결 (0) | 2023.04.10 |