임시 업로드 위치 [/tmp/tomcat.4296537502689403143.5000/work/Tomcat/localhost/ROOT]가 잘못되었습니다.
Spring Boot 1.5.13 버전을 사용하고 있습니다.
아래와 같은 예외 메시지를 받았습니다.
Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.4296537502689403143.5000/work/Tomcat/localhost/ROOT] is not valid
나는 이 이슈를 봄기섭호에서 창간했다.https://github.com/spring-projects/spring-boot/issues/9616
하지만 나는 여전히 그것에 대해 의문점이 있다.
- 앱에서 파일 업로드를 사용하고 있지 않습니다.그러나 로그에는 "멀티 파트 서블릿 요청을 해석할 수 없습니다"라고 기록되어 있습니다(내 앱이 RestTemplate(Post 메서드)를 사용할 때 예외가 발생했습니다).
- 예외를 해결하기 위해 앱을 재부팅했지만 바로 작동하지 않았습니다.앱을 재부팅했지만 존재하지 않는 Tomcat 디렉토리를 참조하고 있었습니다.재부팅 후 하루가 지나자 작동했다.디렉토리는 봄 아니면 다른 곳에 캐시되어 있었던 것 같은데...?
제발 도와주세요!
- http POST 메서드는 이러한 임시 위치를 사용하여 POST 데이터를 저장합니다.
- cent와 같은 OS도 있습니다.OS는 temp dir를 자주 삭제합니다.그 때문에, 그 장소의 허가를 설정해도, 시간이 지나면 OS에 의해서 그 dir가 삭제됩니다.reboot 후에는 temp dir가 달라집니다.
application.yml에서 멀티파트 위치를 설정할 수 있습니다.
spring:
http:
multipart:
location: /data/upload_tmp
갱신하다
Vivek Sethi의 코멘트에 따르면 위 자산은 나에게 효과가 없었고 아래 자산은 효과가 없었다.
spring.servlet.multipart.location=/data/upload_tmp
서버에서 응용 프로그램을 다시 시작하십시오.이것은 spring 서버와 Tomcat 서버 사이의 버그입니다.애플리케이션이 재기동하면, 서버의 temp 디렉토리가 소비됩니다.
이 문제는 며칠 전에 해결되었습니다.
부트2.1 1.20
This version bump fixes an issue when the tmp dir was deleted
by the OS and the spring boot app tries to handle a multifile
upload.
문제: https://github.com/spring-projects/spring-boot/issues/9616
https://github.com/MeiSign/Copy-Pasta/commit/1200fb353a48a3d0c92038dee7cced7cebf3acfe
이 문제는 이미 오래전부터 있었습니다만, 상기의 답변으로 2)에 관한 몇 가지 사항을 알려드리고 싶었습니다.
여기서 문제가 되는 것은 Tomcat의 임시 폴더가 갑자기 "소실"되는 것입니다.이것은, 「일반적인 POST」가 아니고, 특히 멀티 파트 요구에 관한 것입니다.따라서
spring.servlet.springart.location/spring.spring.servlet.slocation.s
여기에 관여하고 있습니다.@Frankstar가 위에서 말한 것처럼 최근의 스프링 부트 코드에서는 "tmp-folder가 없으면 항상 작성"으로 수정되어 있습니다.이것은 물론, 슈퍼 프레시 스프링 부트를 실행하고 있는 경우에도 동작합니다.
수용된 답변에서 제시된 바와 같이 /tmp 이외의 다른 곳을 가리키면 정상적으로 동작합니다(단, 청소에 대해서는 https://github.com/spring-projects/spring-boot/issues/9983를 참조할 필요가 있습니다.현재 봄철 청소에 의존하고 있습니다.이 청소는 정상적으로 동작합니다).
그런데 왜 폴더가 실제로 사라졌을까?한층 더 @Hasan Sawan은 「스프링 서버와 Tomcat 서버 사이의 버그입니다」라고 말하고 있습니다.하지만 정말일까?
델의 솔루션은, 이러한 것을 설정하는 것이었습니다.Cent 등의 OSOS 에서는 를 사용합니다(예를 들어 /tmp 청소에는 https://www.thegeekdiary.com/centos-rhel-7-how-tmpfiles-clean-up-tmp-or-var-tmp-replacement-of-tmpwatch)) systemd 를 참조해 주세요).또, 10일 이내에 액세스 할 수 없는 것은 디폴트 설정으로 클리닝 됩니다.
따라서 Redhat 서버에서 이 문제를 해결했습니다.
/usr/lib/tmpfiles.d/tmp.conf
선 추가
X /tmp/tomcat.*
이 문제를 해결합니다.이것도 다음 방법으로 확인할 수 있습니다.
# SYSTEMD_LOG_TARGET=console SYSTEMD_LOG_LEVEL=debug /usr/bin/systemd-tmpfiles --clean 2>&1 | grep tomcat
이러한 디렉토리가 무시되는 것을 알 수 있습니다.
이 수정은 시스템에도 있지만 대신 tmpwatch가 사용됩니다.https://javahotfix.blogspot.com/2019/03/spring-boot-micro-services-tmptomcat.html
메모: 위의 솔루션은 "재기동" 또는 #mkdir /tmp/tomcat....내가 일하는 곳에서는 받아들여지지 않았다.
질문은 이미 답변이 되었지만, 제가 누군가를 도울 수 있을지도 모릅니다.저도 이런 문제가 있었지만, 어떤 해결책도 제게는 효과가 없었습니다.
우리는 스프링 부츠를 Zuul과 조합하여 사용하고 있는데, 이는 다음과 같이 요약됩니다.
- 응용 프로그램을 중지합니다.
- 주얼이를 막다
- /tmp 폴더에서 Tomcat 관련 폴더 제거(여기는 Tomcat 폴더가 저장된 위치이며 다른 경우 다를 수 있음)
- Zuul 재시작
- 애플리케이션을 재기동합니다.
존재하지 않는 폴더를 가리키고 있었기 때문에 단순히 애플리케이션을 재부팅하는 것만으로는 문제가 되지 않았습니다.이름은 어딘가에 캐시되어 있었습니다.
주울을 사용할 때는 먼저 주울을 거쳐서 예외를 던집니다.
가 한 을 다시 이었습니다.-java.tmp.dir=/path/to/application/temp/
" " "를 ./temp/
폴더는 내 응용 프로그램 폴더에 있습니다.
마이크로 서비스 아키텍처에서 문제는 Zuul 타임아웃이 원인일 수 있습니다.같은 문제에 직면하여 위에서 설명한 모든 것을 시도했지만 효과가 없었습니다.dfs-bulk-service.ribbon에서 타임아웃을 늘린 후.Zuul 속성에서 ReadTimeout=90000 구성, 정상적으로 작동했습니다.여기서 dfs-bulk-service는 Zuul을 api 게이트웨이로 설정한 마이크로 서비스 이름입니다.
POST 요청 폼 본문을 Content-Type: multipart/form-data http header로 인코딩할 수 있습니다.
Content-Type: application/x-www-form-urlencoded POST 를 송신해 주세요.
나에게는 올바른 의존관계를 사용하고 있었다(Java/maven을 사용하고 있는 경우).
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
C:/에 폴더 이름이 temp인 폴더가 없는 경우 C:/temp를 만드는 것보다 이 솔루션이 효과가 있었습니다.
언급URL : https://stackoverflow.com/questions/50523407/the-temporary-upload-location-tmp-tomcat-4296537502689403143-5000-work-tomcat
'programing' 카테고리의 다른 글
ReactJ의 라디오 버튼을 사용하는 방법 (0) | 2023.04.04 |
---|---|
Bootstrap-ui 모달과 함께 ui 라우터 사용 (0) | 2023.04.04 |
각도 ng-repeat vs data-ng-repeat (0) | 2023.04.04 |
Tymeleaf를 사용하여 스프링 모델에서 JavaScript 변수 설정 (0) | 2023.03.25 |
TextField 높이 재료 UI 설정 (0) | 2023.03.25 |