Springboot上傳文件臨時目錄無效

       一個奇葩問題,雖然解決了,但仍是沒弄清楚,小記一筆。前端

       年後回來,測試人員對年前的3次迭代的功能進行了迴歸測試,而後發現全部excel導入的功能都失效了。做爲後臺開發人員,固然是第一時間打開運行日誌排查緣由啦。但奇怪的是,後臺日誌中並無ERROR信息......因而乎轉戰到前端,經過chrome的開發工具發現以下異常:java

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.439562935221680911.8769/work/Tomcat/localhost/ROOT] is not valid org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:112) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.(StandardMultipartHttpServletRequest.java:86)web

.......spring

        從異常信息來看,其實不難理解,就是上傳文件的臨時目錄失效了,百度之後確實如此。可是爲何過完年回來目錄就忽然失效了呢?chrome

        繼續查詢相關資料後瞭解到,springboot啓動時會建立一個用於上傳文件的臨時目錄,而系統會在10天后自動清除該目錄。tomcat

解決方法:springboot

一、重啓服務,從新生成目錄;服務器

二、手動建立該目錄;app

三、在啓動服務的main方法中,添加如下代碼,指定上傳文件的目錄:工具

@Bean

MultipartConfigElementmultipartConfigElement() {

MultipartConfigFactory factory =new MultipartConfigFactory(); 

factory.setLocation("/data/apps/temp"); 

return factory.createMultipartConfig();

}

四、在應用的配置文件中添加如下配置,原理同3:

server:

    tomcat:

        basedir: /data/apps/temp

        實踐證實,以上方法都沒有解決個人問題...

        接着,我進入到服務器的tmp目錄,發現裏面已經建立了多個tomcat的臨時文件,看日期應該是我屢次重啓產生的。那麼正常狀況下,解決方法1應該已經生效了(雖然不能永久性解決這個問題),爲何仍是報異常呢?使人蛋疼的是,新建立的臨時目錄的端口都是8491,就是我重啓的服務的端口,可是異常中的臨時目錄端口是8769,而8769正是zuul網關的端口。因而,我在zuul的配置文件里加上了解決方法4的配置信息,果真就行了...

        令我不解的是,若是是zuul的問題,那麼一開始應該就沒法上傳,而不會等到年後纔出現問題。

文件地址:https://www.jianshu.com/p/cfbbc0bb0b84
相關文章
相關標籤/搜索