인프런 커뮤니티 질문&답변

기호리의우당탕탕백엔드도전기님의 프로필 이미지
기호리의우당탕탕백엔드도전기

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

서블릿과 파일 업로드2

파일 업로드 중 에러 발생

작성

·

8.8K

·

수정됨

2

서블릿과 파일 업로드2 를 학습하던 중

삭제가 불가능하다는 예외가 발생하면서

여러 방법을 시도해도 해결되지 않아 문의 드립니다.

 

개발 환경

window

사용중인 스프링 부트 버전 :  2.7.8

자바 언어 버전 : 11

 

properties 설정

경로 설정은 위의 사진처럼 했습니다.

 

에러 로그를 보면 삭제를 할 수 없다고 뜨면서 예외가 발생합니다.

 

로그 속에 있는 경로로 들어가 직접 파일 제거 시도

-> 서버가 내려갈 경우 파일이 삭제되는 것 확인 가능 해당 부분이 문제라고 생각됩니다.

해결하기 위해 했던 노력

  1. 관리자 권한으로 프로그램 실행

    결과 : 실패

  2. 강의 자료 코드 그대로 옮겨 오기

    결과 : 실패

  3. 강의 소스 코드 그대로 옮겨 오기

    결과 : 실패

  4. 경로 바꿔 보기

    결과 실패

총 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 사용했습니다.

공유 감사합니다 ^3^

와 감사합니다!! 덕분에 해결되었어요!

감사합니다 빠르게 오류를 해결할 수 있었습니다

덕분에 해결했어요!

감사합니다!

0

안녕하세요. 이기호님, 공식 서포터즈 OMG입니다.
.

개발환경: MAC

자바 ver: 11

Boot ver: 2.7.8

 

강의에서 제공해드리는 코드에서 버전을 2.5.1-> 2.7.8로 변경하여 동일한 버전으로 테스트 했을 때 문제가 없었습니다.

 

강의에서 제공해드리는 프로젝트 코드로 확인해보시겠어요?

파일 경로 설정으로 보아 윈도우 사용자 이신 것 같습니다.

코드의 문제이거나 윈도우 + 스프링부트 버전(2.7.8)에서 발생하는 문제일 수도 있을 것 같아요.

 

강의에서 제공해드리는 프로젝트 코드로(부트 버전 2.5.1) 확인하신 후 이상 없을 경우 프로젝트의 버전을 2.7.8로 변경하여 확인 부탁드립니다.

 


.
감사합니다.

부가 설명을 더 드리면 아래 링크에서도 동일한 문제가 발생하였고, 해당 수강생분은 버전을 낮췄을 때 이상이 없다고 한 것으로 보아 버전 문제가 어느정도 맞을 것으로 예상하는데요. (윈도우)

강의에서 제공해드리는 코드로 확인 + 버전업을 하여 확인하여 동일한 이슈인지 확인이 필요할 것 같네요^^!

https://www.inflearn.com/questions/750660/%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C-%EC%8B%9C-java-io-uncheckedioexception-%EC%98%88%EC%99%B8-%EB%B0%9C%EC%83%9D

제가 만들었던 코드를 사용했을 때 2.7.7 버전부터 문제가 발생하고 있었으며 그 이전 버전으로 내렸을 때는 문제가 없었습니다.

테스트 해본 버전으로는 2.5.X부터 테스트 했었고, 3.x.x 버전대는 테스트하지 않았습니다.

 

 

또한 강의 자료의 버전을 올려서 테스트 할 경우에도 해당 문제가 발생하고 있습니다.

저 또한 해당 링크의 질문 처럼 버전이 문제인 것 같습니다.

버전을 낮추어 해결하는 방법도 있지만 다른 방법으로 해결할 수 없을 까? 하는 생각에 질문드립니다!

버젼이 올라갔을 떼 오류가 발생하는 이유는 크게

1) 스프링 부트의 자체 오류

2) 인텔리제이 혹은 그 외 오류 (인텔리제이, 메이븐 저장소 등)

두 가지 이유가 있는데요.

(1) 부트 자체 오류라고 한다면 오류가 이슈로 올라오고, 버전업 되면서 해결이 되고

(2) 부트 오류가 아닌 그 외 오류라고 한다면 자체적으로 해결하여 버전업이 되지 않더라도 해결이 됩니다.

자세한 원인은 영한님과 서포터즈가 확인 후 메뉴얼 수정 혹은 해당 문제가 발생하여 질문을 올리신 글에 답변을 드리고 있으니 참고 부탁드립니다.

기호리의우당탕탕백엔드도전기님의 프로필 이미지
기호리의우당탕탕백엔드도전기

작성한 질문수

질문하기