一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Boot應用上傳文件時報錯的原因及解決方案

Spring Boot應用上傳文件時報錯的原因及解決方案

2021-08-04 10:20nuccch Java教程

這篇文章主要介紹了Spring Boot應用上傳文件時報錯的原因及解決方案,幫助大家更好的理解和學習使用spring boot框架,感興趣的朋友可以了解下

問題描述

Spring Boot應用(使用默認的嵌入式Tomcat)在上傳文件時,偶爾會出現上傳失敗的情況,后臺報錯日志信息如下:“The temporary upload location is not valid”。

原因追蹤

這個問題的根本原因是Tomcat的文件上傳機制引起的!
Tomcat在處理文件上傳時,會將客戶端上傳的文件寫入臨時目錄,這個臨時目錄默認在/tmp路徑下,如:“/tmp/tomcat.6574404581312272268.18333/work/Tomcat/localhost/ROOT”。
而操作系統對于/tmp目錄會不定時進行清理,如果正好因為操作系統的清理導致對應的臨時目錄被刪除,客戶端再上傳文件時就會報錯:“The temporary upload location is not valid”。
實際上,追蹤一下源碼會發現,如果不明確設置Tomcat的文件上傳臨時目錄,默認讀取的是Servlet上下文對象的屬性“javax.servlet.context.tempdir”值,如下源碼:

  • org.apache.catalina.connector.Request
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void parseParts(boolean explicit) {
  //...
  MultipartConfigElement mce = this.getWrapper().getMultipartConfigElement();
  //...
  // 讀取MultipartConfigElement對象的location屬性
  String locationStr = mce.getLocation();
  File location;
  if (locationStr != null && locationStr.length() != 0) {
    location = new File(locationStr);
    if (!location.isAbsolute()) {
      location = (new File((File)context.getServletContext().getAttribute("javax.servlet.context.tempdir"), locationStr)).getAbsoluteFile();
    }
  } else {
    // 如果location屬性值為空,則讀取Servlet上下文對象的屬性“javax.servlet.context.tempdir”值(如:/tmp/tomcat.6574404581312272268.18333/work/Tomcat/localhost/ROOT)
    location = (File)context.getServletContext().getAttribute("javax.servlet.context.tempdir");
  }
  //...
}

解決辦法

既然是因為上傳文件的臨時路徑被刪除導致的問題,就要確保改臨時目錄不會被刪除。
2種解決方法:
(1)通過Spring Boot的配置參數“spring.servlet.multipart.location”明確指定上傳文件的臨時目錄,確保該路徑已經存在,而且該目錄不會被操作系統清除。

?
1
spring.servlet.multipart.location=/data/tmp

 

如上所示,將上傳文件的臨時目錄指定到路徑“/data/tmp”下。

實際上,在Spring Boot中關于上傳文件的所有配置參數如下所示:

?
1
2
3
4
5
6
7
# MULTIPART (MultipartProperties)
spring.servlet.multipart.enabled=true # Whether to enable support of multipart uploads.
spring.servlet.multipart.file-size-threshold=0B # Threshold after which files are written to disk.
spring.servlet.multipart.location= # Intermediate location of uploaded files.
spring.servlet.multipart.max-file-size=1MB # Max file size.
spring.servlet.multipart.max-request-size=10MB # Max request size.
spring.servlet.multipart.resolve-lazily=false # Whether to resolve the multipart request lazily at the time of file or parameter access.

(2)在Spring容器中明確注冊MultipartConfigElement對象,通過MultipartConfigFactory指定一個路徑。
在上述源碼追蹤中就發現,Tomcat會使用MultipartConfigElement對象的location屬性作為上傳文件的臨時目錄。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * 配置上傳文件臨時目錄
 * @return
 */
@Bean
public MultipartConfigElement multipartConfigElement() {
  MultipartConfigFactory factory = new MultipartConfigFactory();
  // tmp.dir參數在啟動腳本中設置
  String path = System.getProperty("tmp.dir");
  if(path == null || "".equals(path.trim())) {
    path = System.getProperty("user.dir");
  }
  String location = path + "/tmp";
  File tmpFile = new File(location);
  // 如果臨時目錄不存在則創建
  if (!tmpFile.exists()) {
    tmpFile.mkdirs();
  }
  // 明確指定上傳文件的臨時目錄
  factory.setLocation(location);
  return factory.createMultipartConfig();
}

參考

https://stackoverflow.com/questions/50523407/the-temporary-upload-location-tmp-tomcat-4296537502689403143-5000-work-tomcat/50523578

以上就是Spring Boot應用上傳文件時報錯的原因及解決方案的詳細內容,更多關于Spring Boot應用上傳文件時報錯的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.cnblogs.com/nuccch/p/11546494.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品四虎在线观看免费 | a性片| 亚洲国产精品免费在线观看 | 香港三级浴室女警官 | 色成人综合网 | 日韩一区国产二区欧美三 | 欧美久久综合网 | 草啪啪| 肉浦团在线观看 | 大杳蕉在线影院在线播放 | 大陆国产精品视频 | 色综合色狠狠天天久久婷婷基地 | 日韩亚洲人成在线 | 第一次做m被调教经历 | 大胸被c出奶水嗷嗷叫 | 美女机机对机机的视频(免费) | 羞羞答答免费人成黄页在线观看国产 | 皇上撞着太子妃的秘密小说 | 91精品啪在线观看国产91九色 | 精品国产剧情在线观看 | 国产肥臀 | 欧美一区二区三区不卡视频 | 久久机热视频 这里只有精品首页 | 日本剧情片在线播放中文版 | 国产一卡二卡3卡4卡四卡在线视频 | 好大好想要 | hezyo加勒比一区二区三区 | 啪啪无尽3d动漫漫画免费网站 | 日韩欧美高清 | naruto hentai玖辛奈 | 俄罗斯图书馆无打码久久 | 日本一二线不卡在线观看 | 狠狠撸在线影院 | 农村妇女野外性生话免费视频 | 韩国漂亮美女三级在线观看 | 男人综合网| 亚洲人成网站在线观看青青 | 小小水蜜桃免费影院 | 国产精品视频2020 | 亚洲国产日韩成人综合天堂 | 极品美女写真菠萝蜜视频 |