日常問題:上傳接口報錯

日常問題:上傳接口報錯

項目啓動後,一段時間沒怎麼用之後,系統所有上傳接口都失敗,報錯爲接口異常。

這個問題通常不會出現的,因爲正常情況下使用,不可能會有7天不進行文件上傳操作的。

因爲財務上傳報表是每個工作日的啊 ╮(╯_╰)╭

結果碰到了國慶春節長假,還有今年疫情的超級長假。然後就炸了 ε=(´ο`*)))唉


問題

Springboot上傳文件錯誤:org.springframework.web.multipart.MultipartException
....
org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.8514542127953693245.8091/work/Tomcat/localhost/ROOT] is not valid
....

原因

linux系統會定期(10天)清除tmp目錄下沒有使用過的文件,springBoot啓動的時候會在/tmp目錄下生成一個tomcat.****.port(tomcat.8514542127953693245.8091)的文件目錄,此目錄要是清除後,就是出現上傳文件錯誤!

具體清除腳本詳情:

從/var/log/cron 日誌中發現,服務器除了調用用戶的計劃任務外,還會執行系統自己的.

進入 /etc/cron.daily , 可以看到一個tmpwatch

裏面調用了/usr/sbin/tmpwatch 腳本 參數爲240 =10*24 =10天

解決

第一種臨時方法,萬能的重啓。臨時文件會重新生成。

第二種方法,重啓,並且調整系統清理的時長,把上文原因中提到的腳本時間延長到100+天。【要是幾百天都不用的系統,也就不用維護啦 罒ω罒】

第三種方法,項目配置Bean,提供臨時文件目錄

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //單個文件最大
        factory.setMaxFileSize("10240KB");
        /// 設置總上傳數據總大小
        factory.setMaxRequestSize("102400KB");
        // 這種寫法在linux下是沒問題的,但是開發windows上會找不到目錄
        // factory.setLocation("/var/tmp");
        // 由於默認/tmp 臨時目錄下 Linux 會清理7天無操作目錄,所以換個上傳目錄試試
        String location = System.getProperty("user.home") + "/data/tmp";
        File tmpFile = new File(location);
        if (!tmpFile.exists()) {
            tmpFile.mkdirs();
        }
        factory.setLocation(location);
        return factory.createMultipartConfig();
    }

參考文檔

就這個了,很詳細的:https://blog.csdn.net/liuxiaoming1109/article/details/93467180

這個是linux下文件自動刪除的文章:https://www.tuicool.com/articles/6Jj6rq


小杭 2020-02-19 (:з」∠)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章