Study/Java
[Java] java.io.FileNotFoundException: (액세스가 거부되었습니다)
성으니:)
2024. 1. 8. 14:25
내가 작성한 파일첨부 메일 전송 코드는 다음과 같고, 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;
}