Spring 临时上载位置[/tmp/tomcat.4296537502689403143.5000/work/tomcat/localhost/ROOT]无效
我使用的是Spring Boot 1.5.13版本 我得到了如下异常消息Spring 临时上载位置[/tmp/tomcat.4296537502689403143.5000/work/tomcat/localhost/ROOT]无效,spring,spring-boot,embedded-tomcat-8,Spring,Spring Boot,Embedded Tomcat 8,我使用的是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 我在春季Github期刊上发现了这个问
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
我在春季Github期刊上发现了这个问题。
但我对此仍有疑问
spring:
http:
multipart:
location: /data/upload_tmp
更新
根据Vivek Sethi的评论,上述财产不适用于我,但以下一项适用于我
spring.servlet.multipart.location=/data/upload_tmp
我解决这个问题的方法是重新启动应用程序,添加
-java.tmp.dir=/path/to/application/temp/
,并在我的应用程序文件夹中创建一个/temp/
文件夹。只需在服务器中重新启动应用程序。这是spring和tomcat服务器之间的一个bug。一旦应用程序重新启动,它将使用一个临时目录在服务器中。问题已经得到回答,但也许我可以帮助某人。我也有这个问题,但建议的解决方案都不适合我
我们将Spring boot与Zuul结合使用,可归结为以下几点:
当使用Zuul时,请求首先通过Zuul并在那里抛出异常。在微服务体系结构中,问题可能是由于Zuul超时。我遇到了同样的问题,尝试了上面讨论的所有方法,但都不起作用。在我使用dfs bulk service.ribbon.ReadTimeout=90000配置Zuul属性增加超时后,它起作用了很好。这里的dfs批量服务是我的微服务名称,配置了Zuul作为api网关。这个问题几天前就解决了。
弹簧靴: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.
问题:
我们很久以来也遇到过这个问题,我只是想在上面公认的答案中说明一些与2)有关的东西 所以,这里的问题是tomcat的临时文件夹突然“消失”了,并不像所说的那样用于“一般的帖子”,而是专门用于多部分请求。因此 spring.servlet.multipart.location/spring.http.multipart.location 这里涉及到。正如@Frankstar在上面所说的,在最近的spring引导代码中,这是通过“如果tmp文件夹不存在,则始终创建tmp文件夹”来修复的,当然,如果您正在运行一个超级新鲜的spring引导,它也会起作用 您可以按照公认的答案中的建议,将其指向/tmp以外的其他地方,它会工作得很好(不过,关于清理,您也许应该在这里阅读一下-您现在依赖于spring boots cleanup,尽管它应该工作得很好) 但为什么文件夹真的消失了?再往下看@Hasan Sawan说“这是spring和tomcat服务器之间的一个bug”。但这真的是 对我们来说,解决方案就是配置这些东西。CentOS等操作系统将使用(例如参见))systemd进行清理/tmp,默认设置将清理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
注意:上面提到的解决方案是“重新启动”或只是#mkdir/tmp/tomcat。。。。我工作的地方根本不接受。您可以通过内容类型:多部分/表单数据对POST请求的表单正文进行编码 http头
您应该发送一个内容类型:application/x-www-form-urlencodedPOST对我来说,它使用了正确的依赖项(如果使用java/maven)
公地io
公地io
2.6
检查C://中的文件夹,如果没有一个名为temp的文件夹,则创建它C:/temp,,,此解决方案对我有效此属性已弃用。使用spring.servlet.multipart.location
而不是对于希望指定非“tmp”位置的人,我使用了以下方法:spring.servlet.multipart.location:${user.dir}
在我的应用程序中。ymlspring.servlet.multipart.location
在spring boot 1.5.9上不起作用,但spring.http.multipart.location
起作用。@mavlan,这是临时解决方案,我们如何永久解决,即使这显示错误新位置未找到。我不认为这是一个临时解决方案。我们需要确保我们的应用程序可以在不同的系统上运行。CentOS将在某个时候删除临时目录。所以我们需要定义一个临时目录位置。所以它不受系统在临时目录上的行为的影响。同意,在微服务体系结构中,问题可能是由于Zuul造成的。我面对同样的问题,尝试了上面讨论的一切,但都没有成功。使用dfs批量服务增加超时后。ribbon.ReadTimeout=90000配置
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>