파일 업로드 중 에러 발생
9693
작성한 질문수 3
서블릿과 파일 업로드2 를 학습하던 중
삭제가 불가능하다는 예외가 발생하면서
여러 방법을 시도해도 해결되지 않아 문의 드립니다.
개발 환경
window
사용중인 스프링 부트 버전 : 2.7.8
자바 언어 버전 : 11
properties 설정
경로 설정은 위의 사진처럼 했습니다.
에러 로그를 보면 삭제를 할 수 없다고 뜨면서 예외가 발생합니다.
로그 속에 있는 경로로 들어가 직접 파일 제거 시도
-> 서버가 내려갈 경우 파일이 삭제되는 것 확인 가능 해당 부분이 문제라고 생각됩니다.
해결하기 위해 했던 노력
관리자 권한으로 프로그램 실행
결과 : 실패
강의 자료 코드 그대로 옮겨 오기
결과 : 실패
강의 소스 코드 그대로 옮겨 오기
결과 : 실패
경로 바꿔 보기
결과 실패
총 4가지의 시도 결과 전부 실패해 문의 드립니다.
에러 발생 로그
내가 생각하는 로그 핵심 문제 원인
2023-01-22 21:42:00.789 WARN 31328 --- [nio-8080-exec-3] s.w.m.s.StandardServletMultipartResolver : Failed to perform cleanup of multipart items

2023-01-22 20:48:55.796 ERROR 28536 --- [nio-7070-exec-3] o.apache.coyote.http11.Http11Processor : Error processing request
java.io.UncheckedIOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp
at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.delete(DiskFileItem.java:431) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.core.ApplicationPart.delete(ApplicationPart.java:54) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.connector.Request.recycle(Request.java:483) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:441) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
Caused by: java.io.IOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp
... 13 common frames omitted
2023-01-22 20:48:55.796 DEBUG 28536 --- [nio-7070-exec-3] o.apache.coyote.http11.Http11Processor : Error state [CLOSE_CLEAN] reported while processing request
java.io.UncheckedIOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp
at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.delete(DiskFileItem.java:431) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.core.ApplicationPart.delete(ApplicationPart.java:54) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.connector.Request.recycle(Request.java:483) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:441) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
Caused by: java.io.IOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp
... 13 common frames omitted
2023-01-22 20:48:55.798 ERROR 28536 --- [nio-7070-exec-3] o.a.coyote.http11.Http11NioProtocol : Error reading request, ignored
java.io.UncheckedIOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp
at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.delete(DiskFileItem.java:431) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.core.ApplicationPart.delete(ApplicationPart.java:54) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.connector.Request.recycle(Request.java:483) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.connector.CoyoteAdapter.log(CoyoteAdapter.java:515) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:429) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
Caused by: java.io.IOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp
... 13 common frames omitted
2023-01-22 20:48:55.799 ERROR 28536 --- [nio-7070-exec-3] org.apache.tomcat.util.net.NioEndpoint : Error running socket processor
java.io.UncheckedIOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp
at org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.delete(DiskFileItem.java:431) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.core.ApplicationPart.delete(ApplicationPart.java:54) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.connector.Request.recycle(Request.java:483) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.connector.CoyoteAdapter.log(CoyoteAdapter.java:515) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.catalina.connector.CoyoteAdapter.checkRecycled(CoyoteAdapter.java:539) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.coyote.http11.Http11Processor.recycle(Http11Processor.java:1439) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.release(AbstractProtocol.java:1098) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:1056) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.71.jar:9.0.71]
at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
Caused by: java.io.IOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp
... 14 common frames omitted
답변 2
25
저도 동일한 오류를 겪었는데 해결책을 찾아 공유합니다.
ServletUploadControllerV2에 메서드에
inputStream.close(); 을 추가해주니 오류가 사라졌어요.
//파일에 저장하기
if (StringUtils.hasText(part.getSubmittedFileName())) {
String fullPath = fileDir + part.getSubmittedFileName();
log.info("파일 저장 fullPath={}", fullPath);
part.write(fullPath);
}
inputStream.close();로 적으면 되네요
(for (Part part : parts) 끝나는 부분에 inputStream.close(); 작성)
스프링 부트는 2.7.7
인텔리제이는 22.3.1
자바는 11 사용했습니다.
0
개발환경: MAC
자바 ver: 11
Boot ver: 2.7.8
강의에서 제공해드리는 코드에서 버전을 2.5.1-> 2.7.8로 변경하여 동일한 버전으로 테스트 했을 때 문제가 없었습니다.
강의에서 제공해드리는 프로젝트 코드로 확인해보시겠어요?
파일 경로 설정으로 보아 윈도우 사용자 이신 것 같습니다.
코드의 문제이거나 윈도우 + 스프링부트 버전(2.7.8)에서 발생하는 문제일 수도 있을 것 같아요.
강의에서 제공해드리는 프로젝트 코드로(부트 버전 2.5.1) 확인하신 후 이상 없을 경우 프로젝트의 버전을 2.7.8로 변경하여 확인 부탁드립니다.
.
감사합니다.
0
부가 설명을 더 드리면 아래 링크에서도 동일한 문제가 발생하였고, 해당 수강생분은 버전을 낮췄을 때 이상이 없다고 한 것으로 보아 버전 문제가 어느정도 맞을 것으로 예상하는데요. (윈도우)
강의에서 제공해드리는 코드로 확인 + 버전업을 하여 확인하여 동일한 이슈인지 확인이 필요할 것 같네요^^!
0
제가 만들었던 코드를 사용했을 때 2.7.7 버전부터 문제가 발생하고 있었으며 그 이전 버전으로 내렸을 때는 문제가 없었습니다.
테스트 해본 버전으로는 2.5.X부터 테스트 했었고, 3.x.x 버전대는 테스트하지 않았습니다.
또한 강의 자료의 버전을 올려서 테스트 할 경우에도 해당 문제가 발생하고 있습니다.
저 또한 해당 링크의 질문 처럼 버전이 문제인 것 같습니다.
버전을 낮추어 해결하는 방법도 있지만 다른 방법으로 해결할 수 없을 까? 하는 생각에 질문드립니다!
0
버젼이 올라갔을 떼 오류가 발생하는 이유는 크게
1) 스프링 부트의 자체 오류
2) 인텔리제이 혹은 그 외 오류 (인텔리제이, 메이븐 저장소 등)
두 가지 이유가 있는데요.
(1) 부트 자체 오류라고 한다면 오류가 이슈로 올라오고, 버전업 되면서 해결이 되고
(2) 부트 오류가 아닌 그 외 오류라고 한다면 자체적으로 해결하여 버전업이 되지 않더라도 해결이 됩니다.
자세한 원인은 영한님과 서포터즈가 확인 후 메뉴얼 수정 혹은 해당 문제가 발생하여 질문을 올리신 글에 답변을 드리고 있으니 참고 부탁드립니다.
이미지 업로드와 db 트랜잭션 묶는법
0
43
1
Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4
0
53
2
MessageSourceTest 코드
0
49
1
인터셉터 에러 설정
0
48
1
resolveArgument()메서드 질문
0
57
1
43강 검증1 에서 실패 로직 관련 질문있습니다.
0
58
2
타임리프 3.X 버전 rendering, serializer 에러 해결 방법
2
133
3
스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ
0
90
3
pdf 오타 문의
0
57
1
ItemUpdateForm 검증 관련 질문입니다.
0
49
1
22page 링크 주소 변경
0
59
2
특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문
0
53
1
섹션3번 수업에 대한 질문입니다.
0
80
2
@Autowired 보다 더 좋은 방법이 어떤 걸까요?
0
85
2
타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.
0
66
1
자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다
0
142
3
스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문
0
63
1
톰캣 에러 페이지가 안보입니다.
0
104
2
apiEceptionController에서 센드 에러 호출하면 안되는지?
0
81
1
세션 타임아웃시 쿠키 삭제 방법이 없나요?
0
118
2
ApiExceptionController 질문드립니다.
0
64
1
셀렉박스 챕터에서 option value에 ==배송 방식 선택== 이것을 넣은 이유가 궁금함, 이렇게 구상해도 되는지?
0
66
1
MemberRepository 필드의 fianl 선언 유무
0
85
2
혹시 index.html 에서는 fragment 사용이 안되는건가요
0
58
1





