我正在使用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
我在Spring Github问题中找到了这个问题。 https://github.com/spring-projects/spring-boot/issues/9616
但我仍有疑问。
请帮帮我!
答案 0 :(得分:15)
您可以在application.yml中设置多部分位置:
spring:
http:
multipart:
location: /data/upload_tmp
答案 1 :(得分:6)
只需重新启动服务器中的应用程序即可。这是spring和tomcat服务器之间的错误。应用程序重新启动后,它将在服务器中使用一个临时目录。
答案 2 :(得分:1)
问题已经回答,但也许我可以帮助某人。我也遇到了这个问题,但是没有建议的解决方案对我有用。
我们将Spring boot与Zuul结合使用,归结为以下内容:
仅重新启动应用程序对我们而言不起作用,因为它指向的文件夹不存在:名称已缓存在某处。
使用Zuul时,请求首先通过Zuul,然后在其中引发异常。
答案 3 :(得分:0)
我的应用程序遇到同样的问题,我解决该问题的方法是重新启动应用程序,添加-java.tmp.dir = / path / to / application / temp /并在我的应用程序中创建一个/ temp /文件夹文件夹。
答案 4 :(得分:0)
在微服务架构中,问题可能是由于Zuul超时引起的。我遇到了同样的问题,并尝试了上面讨论的所有内容,但没有成功。在Zuul属性中使用dfs-bulk-service.ribbon.ReadTimeout = 90000配置增加超时后,它工作正常。 dfs-bulk-service是我的微服务名称,配置了Zuul作为api网关。
答案 5 :(得分:0)
此问题已在几天前修复。
春季靴:2.1.4或1.5.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
答案 6 :(得分:0)
很久以来我们也遇到了这个问题,我只是想表达一些与上面接受的答案中的2)有关的东西。
因此,这里的问题是tomcat的临时文件夹突然“消失”,而不是声称的“一般POST”,而是专门针对多部分请求。因此
spring.servlet.multipart.location / spring.http.multipart.location
涉及到这里。正如@Frankstar所说,在最近的Spring-boot代码中,此问题已通过“如果不存在则始终创建tmp-folder”来解决,当然,如果您运行的是超新鲜的弹簧, -启动。
您可以按照接受的答案中的建议将其指向/ tmp以外的其他位置,并且可以正常工作(尽管有关清理,您可能应该在这里https://github.com/spring-projects/spring-boot/issues/9983进行阅读-您现在很依赖在进行春季靴子清理时,应该应该工作正常)。
但是为什么文件夹实际上消失了?再往下走,@ Hasan Sawan说:“这是spring和tomcat服务器之间的错误”。但这是真的吗??
对我们来说,解决方案是配置这些东西。诸如CentOS之类的OS将使用systemd清理/ tmp(例如参见https://www.thegeekdiary.com/centos-rhel-7-how-tmpfiles-clean-up-tmp-or-var-tmp-replacement-of-tmpwatch),并且默认情况下将清理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 ....的解决方案在我工作的地方根本不被接受。
答案 7 :(得分:0)
您可以通过 Content-Type:multipart / form-data 对POST请求的表单主体进行编码 http标头。
您应该发送 Content-Type:application / x-www-form-urlencoded POST
答案 8 :(得分:0)
对我来说,它使用的是正确的依赖项(如果使用java / maven)
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
答案 9 :(得分:0)
检查 C:/ 中的文件夹,如果没有一个名为 temp 的文件夹而不是创建它 C:/temp ,,, 这个解决方案对我有用< /p>
答案 10 :(得分:-1)
建议通过spring(或服务器)配置为临时存储指定自定义目录路径。
但是快速攻克方法是创建所提到的目录并提供读/写权限为
mkdir -p /tmp/tomcat.4296537502689403143.5000/work/Tomcat/localhost/ROOT
chmod 755 /tmp/tomcat.4296537502689403143.5000/work/Tomcat/localhost/ROOT
tomcat.xxxxxxxxxxxx.xxxx-每个服务器上都不同。 从服务器错误中使用此目录名称。