电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:20日期:2023-07-23 17:20:49
問題描述

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

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”明確指定上傳文件的臨時目錄,確保該路徑已經存在,而且該目錄不會被操作系統清除。

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

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

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

# 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屬性作為上傳文件的臨時目錄。

/** * 配置上傳文件臨時目錄 * @return */@Beanpublic 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應用上傳文件時報錯的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
主站蜘蛛池模板: 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | 阻燃剂-氢氧化镁-氢氧化铝-沥青阻燃剂-合肥皖燃新材料 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 煤棒机_增碳剂颗粒机_活性炭颗粒机_木炭粉成型机-巩义市老城振华机械厂 | 传爱自考网_传爱自学考试网 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 冷油器,取样冷却器,热力除氧器-连云港振辉机械设备有限公司 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 工装定制/做厂家/公司_工装订做/制价格/费用-北京圣达信工装 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 免联考国际MBA_在职MBA报考条件/科目/排名-MBA信息网 | 智能终端_RTU_dcm_北斗星空自动化科技 | 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 电车线(用于供电给电车的输电线路)-百科 | 金刚网,金刚网窗纱,不锈钢网,金刚网厂家- 河北萨邦丝网制品有限公司 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | Brotu | 关注AI,Web3.0,VR/AR,GPT,元宇宙区块链数字产业 | 挤出机_橡胶挤出机_塑料挤出机_胶片冷却机-河北伟源橡塑设备有限公司 | 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 液晶拼接屏厂家_拼接屏品牌_拼接屏价格_监控大屏—北京维康 | 一体化预制泵站-一体化提升泵站-一体化泵站厂家-山东康威环保 | 九州网址_专注于提供网址大全分享推广中文网站导航服务 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 外贸网站建设-外贸网站设计制作开发公司-外贸独立站建设【企术】 | 密集柜_档案密集柜_智能密集架_密集柜厂家_密集架价格-智英伟业 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 | 【官网】博莱特空压机,永磁变频空压机,螺杆空压机-欧能优 | 校园气象站_超声波气象站_农业气象站_雨量监测站_风途科技 | 浙江清风侠环保设备有限公司| 耐高温电缆厂家-远洋高温电缆| 壹作文_中小学生优秀满分作文大全| 博莱特空压机|博莱特-阿特拉斯独资空压机品牌核心代理商 | 飞利浦LED体育场灯具-吸顶式油站灯-飞利浦LED罩棚灯-佛山嘉耀照明有限公司 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 卧涛科技有限公司科技项目申报公司|高新技术企业申报|专利申请 | 连栋温室大棚建造厂家-智能玻璃温室-薄膜温室_青州市亿诚农业科技 |