FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed.
文件上传请求处理失败org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. \temp\upload__786e5f65_1756379789a__8000_00000027.tmp (系统找不到指定的路径。)
错误代码如下:------------------------
2020-10-26 16:07:15,891 ERROR LifeFile - 文件上传请求处理失败
org.apache.commons.fileupload.FileUploadBase$IOFileUploadException:
Processing of multipart/form-data request failed.
\temp\upload__786e5f65_1756379789a__8000_00000027.tmp (系统找不到指定的路径。)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:367)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at com.ynet.life.innermanage.file.parser.LifeMultipartResolver.resolverMultipart(LifeMultipartResolver.java:140)
at com.ynet.gene.web.servlet.GENERequestServlet.service(GENERequestServlet.java:394)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.ynet.life.filter.RequestInjectionFilter.doFilter(RequestInjectionFilter.java:140)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.FileNotFoundException: \temp\upload__786e5f65_1756379789a__8000_00000027.tmp (系统找不到指定的路径。)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at org.apache.commons.io.output.DeferredFileOutputStream.thresholdReached(DeferredFileOutputStream.java:165)
at org.apache.commons.io.output.ThresholdingOutputStream.checkThreshold(ThresholdingOutputStream.java:221)
at org.apache.commons.io.output.ThresholdingOutputStream.write(ThresholdingOutputStream.java:127)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:101)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:362)
... 21 more
代码错误发生场景:
在代码一致的情况下:
服务在本地执行可以正常上传图片,
在测试环境服务器,无法正常上传,抛出上述错误信息。
分析原因:
首先排除掉了代码问题,其次我开始寻找有关文件上传,下载中有使用到的地址
找到如下俩个文件上传下载的资源地址配置;
1.配置文件问题,我的配置文件中有配置,文件下载的临时目录 目录 /app/service/temp
2.linux本身在上传文件资源的时候会使用到一个临时文件目录 我的是 /temp
根据错误信息;------
\temp\upload__786e5f65_1756379789a__8000_00000027.tmp (系统找不到指定的路径。)
问题出现在上传文件资源的临时文件目录的可能性比较大。
解决方案:
在linux ./目录下,新建了temp目录。
新建完目录,再次传输资源文件,还是抛出错误信息。
\temp\upload__786e5f65_1756379789a__8000_00000027.tmp (系统找不到指定的路径。)
原因是因为我们公司的linux服务器的文件夹是有权限控制的,使用root权限帐号修改文件夹权限 ,
我新建的temp目录为,-rwxr-xr-x。所以导致文件资源传输再次报错
-rw------- (600) 只有所有者才有读和写的权限
-rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------ (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw- (666) 每个人都有读写的权限
-rwxrwxrwx (777) 每个人都有读写和执行的权限
在linux中执行如下命令,修改文件夹权限 ,
让文件夹temp及其子文件夹,可读可写可执行
chmod -R 777 /temp
/*
777是修改文件夹内所有的文件和文件夹及子文件夹属性为可写可读可执行
/temp 是文件夹本身的路径
*/
最终问题完美解决!