解决 Processing of multipart/form-data request failed. /upload/A.tmp (No such file or directory) 问题
2018-01-23 08:55
991 查看
使用spring boot 上传,刚开始一切正常,但过了一段时间上传文件的时候出现错误。
ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. C:\Users\hp\AppData\Local\Temp\tomcat.7007283165982469173.7102\work\Tomcat\localhost\ROOT\upload_82a53f5c_e2da_43a5_9b71_d5349d403a82_00000067.tmp (系统找不到指定的路径。)] with root cause
究竟是什么原因呢?报错信息已经说了,就是找不到路径,这个路径是tomcat临时文件的目录。
那为什么一开始又一切正常呢?而过了一段时间后就报错了?
其实这跟临时文件夹存活时间有关。如果我们不指定tomcat运行根目录,那么在sping boot 项目启动时,系统会自动创建一个项目运行临时目录,一般在\AppData\Local\Temp\
目录下。这个临时文件有自己的清理策略,会在一段时间后自动清理。所以说为什么刚开始运行一切正常,而过了一段时间之后就报找不到路径了。
网上有很多解决方案,但很多都无法真正解决,如:
第一种:修改maxInMemorySize,据说上传文件大小若小于此参数,则不会生成临时文件。所以要改小一点,然而并没有什么用。
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8" />
<!-- 指定所上传文件的总大小不能超过2000KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
<property name="maxUploadSize" value="2048000" />
<!-- 设置在文件上传时允许写到内存中的最大值,以字节为单位计算,默认是10240 -->
<property name="maxInMemorySize" value="2048" />
</bean>第二种:修改
这个
boot下没有什么作用
/**
* 文件上传临时路径
*/
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/app/pttms/tmp");
return factory.createMultipartConfig();
}最终解决方案(当然也不一定就是你遇到的问题,只是我是这样解决的)
#spring boot 项目中,application.properties增加如下配置指定tomcat的基目录,否则spring boot内嵌的tomcat容器会创建一个临时目录,但是此目录有一个定期清除策略,会影响web容器资源的使用,所以指定在项目根目录创建目录
server.tomcat.basedir=./deployer/tomcat
ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. C:\Users\hp\AppData\Local\Temp\tomcat.7007283165982469173.7102\work\Tomcat\localhost\ROOT\upload_82a53f5c_e2da_43a5_9b71_d5349d403a82_00000067.tmp (系统找不到指定的路径。)] with root cause
究竟是什么原因呢?报错信息已经说了,就是找不到路径,这个路径是tomcat临时文件的目录。
那为什么一开始又一切正常呢?而过了一段时间后就报错了?
其实这跟临时文件夹存活时间有关。如果我们不指定tomcat运行根目录,那么在sping boot 项目启动时,系统会自动创建一个项目运行临时目录,一般在\AppData\Local\Temp\
目录下。这个临时文件有自己的清理策略,会在一段时间后自动清理。所以说为什么刚开始运行一切正常,而过了一段时间之后就报找不到路径了。
网上有很多解决方案,但很多都无法真正解决,如:
第一种:修改maxInMemorySize,据说上传文件大小若小于此参数,则不会生成临时文件。所以要改小一点,然而并没有什么用。
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8" />
<!-- 指定所上传文件的总大小不能超过2000KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
<property name="maxUploadSize" value="2048000" />
<!-- 设置在文件上传时允许写到内存中的最大值,以字节为单位计算,默认是10240 -->
<property name="maxInMemorySize" value="2048" />
</bean>第二种:修改
location的值
这个
location可以理解为临时文件目录,可以通过配置
location的值,但在spring
boot下没有什么作用
/**
* 文件上传临时路径
*/
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/app/pttms/tmp");
return factory.createMultipartConfig();
}最终解决方案(当然也不一定就是你遇到的问题,只是我是这样解决的)
#spring boot 项目中,application.properties增加如下配置指定tomcat的基目录,否则spring boot内嵌的tomcat容器会创建一个临时目录,但是此目录有一个定期清除策略,会影响web容器资源的使用,所以指定在项目根目录创建目录
server.tomcat.basedir=./deployer/tomcat
相关文章推荐
- org.apache.commons.fileupload.FileUploadException: Processing of multipart/form-data request failed解决
- 报错Processing of multipart/form-data request failed. /upload/A.tmp (No such file or directory)
- Unable to parse request org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. null
- 上传文件出错:org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
- 上传文件出错:org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
- servlet: org.apache.tomcat.util.http.fileupload.FileUploadException: Processing of multipart/form-data request failed
- 关于nginx报错/usr/share/nginx/html/jiankongshare" failed (2: No such file or directory)的问题解决
- 关于ImageIO: CGImageRead_mapData 'open' failed ' XXX error = 2 (No such file or directory)问题
- 关于nginx报错/usr/share/nginx/html/jiankongshare" failed (2: No such file or directory)的问题解决
- 解决安装nginx的nginx: [emerg] mkdir() "/var/temp/nginx/client" failed (2: No such file or directory)问题
- rmmod: can't change directory to '/lib/modules': No such file or directory问题解决
- 解决DPDK脚本python执行时“OSError: [Errno 2] No such file or directory”的问题
- ubuntu下解决expat.h: No such file or directory的问题
- iis服务器php环境 failed to open stream: No such file or directory解决办法
- 在VC空项目里添加自定义的预编译头(或关于:无法打开预编译头文件:“Debug/xxx.pch”: No such file or directory的问题的解决)
- [Linux vim问题解决] -bash: ./script.sh: /usr/bin/bash^M: bad interpreter: No such file or directory
- 【解决交叉编译工具链问题】bash: gcc:no such file or directory
- QtNetwork: No such file or directory 问题的解决_tdd09的空间_百度空间
- error: asm/arch/regs-gpio.h: No such file or directory 此类问题的解决办法
- Qt 5 在Windows下 出现QApplication: No such file or directory 问题的解决办法