最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot文件上傳出現(xiàn)找不到指定系統(tǒng)路徑的解決

 更新時(shí)間:2021年08月31日 15:20:44   作者:帶著希望活下去  
這篇文章主要介紹了Springboot文件上傳出現(xiàn)找不到指定系統(tǒng)路徑的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Springboot文件上傳出現(xiàn)找不到指定系統(tǒng)路徑

1、問(wèn)題描述

關(guān)鍵字:SpringMVC 4.2.4、Spring Boot 1.3.1、Servlet 3.0、文件上傳

報(bào)錯(cuò)信息:

java.io.IOException: java.io.FileNotFoundException: /tmp/tomcat.273391201583741210.8080/work/Tomcat/localhost/ROOT/tmp/source/IMG_20160129_132623.jpg (No such file or directory)

問(wèn)題源碼:transferTo方法報(bào)錯(cuò)

// 前端傳入mulFileSource
// 創(chuàng)建壓縮前源文件
File fileSourcePath = new File("tmp/source/");
File fileSource = new File(fileSourcePath, mulFileSource.getOriginalFilename());
if (!fileSourcePath.exists()) {
    fileSourcePath.mkdirs();
}
// 將接收得圖片暫存到臨時(shí)文件中
mulFileSource.transferTo(fileSource);

2、問(wèn)題分析

首先,看源碼中文件定義,相對(duì)路徑,預(yù)期路徑應(yīng)該是項(xiàng)目路徑/tmp/source/,但是報(bào)錯(cuò)確是一個(gè)系統(tǒng)臨時(shí)文件路徑(tomcat的)。

其次,由于是transferTo方法報(bào)錯(cuò),因此應(yīng)該是該方法寫(xiě)入文件時(shí)報(bào)錯(cuò),因此,我們跟入方法源碼。

public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpServletRequest {
//中間代碼省略
/**
 * Spring MultipartFile adapter, wrapping a Servlet 3.0 Part object.
 */
@SuppressWarnings("serial")
private static class StandardMultipartFile implements MultipartFile, Serializable {
//中間代碼省略
@Override
public void transferTo(File dest) throws IOException, IllegalStateException {
this.part.write(dest.getPath());
package org.apache.catalina.core;
/**
 * Adaptor to allow {@link FileItem} objects generated by the package renamed
 * commons-upload to be used by the Servlet 3.0 upload API that expects
 * {@link Part}s.
 */
public class ApplicationPart implements Part {
//中間代碼省略
    @Override
    public void write(String fileName) throws IOException {
        File file = new File(fileName);
        if (!file.isAbsolute()) {
            file = new File(location, fileName);
        }
        try {
            fileItem.write(file);
        } catch (Exception e) {
            throw new IOException(e);
        }
    }
}

源碼一目了然,使用Servlet3.0的支持的上傳文件功能時(shí),如果我們沒(méi)有使用絕對(duì)路徑的話,transferTo方法會(huì)在相對(duì)路徑前添加一個(gè)location路徑,即:file = new File(location, fileName);。當(dāng)然,這也影響了SpringMVC的Multipartfile的使用。

由于我們創(chuàng)建的File在項(xiàng)目路徑/tmp/source/,而transferTo方法預(yù)期寫(xiě)入的文件路徑為/tmp/tomcat.273391201583741210.8080/work/Tomcat/localhost/ROOT/tmp/source/,我們并沒(méi)有創(chuàng)建該目錄,因此會(huì)拋出異常。

3、問(wèn)題解決方案

使用絕對(duì)路徑

修改location的值

這個(gè)location可以理解為臨時(shí)文件目錄,我們可以通過(guò)配置location的值,使其指向我們的項(xiàng)目路徑,這樣就解決了我們遇到的問(wèn)題。

在Spring Boot下配置location,可以在main()方法所在文件中添加如下代碼:

/**
 * 文件上傳臨時(shí)路徑
 */
 @Bean
 MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();
    factory.setLocation("/app/pttms/tmp");
    return factory.createMultipartConfig();
}

SpringBoot 上傳文件時(shí)本地路徑無(wú)效

SpringBoot 通過(guò)網(wǎng)關(guān)Zuul進(jìn)行附件上傳的時(shí)候,有時(shí)會(huì)出現(xiàn)如下錯(cuò)誤

[Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io .IOException: The temporary upload location [/tmp/tomcat.3814974221022613431.8080/work/Tomcat/localhost/ROOT] is not valid] with root causejava.io .IOException: The temporary upload location [/tmp/tomcat.3814974221022613431.8080/work/Tomcat/localhost/ROOT] is not valid

錯(cuò)誤產(chǎn)生的原因

1、spring boot的應(yīng)用服務(wù)在啟動(dòng)的時(shí)候,會(huì)生成在操作系統(tǒng)的/tmp目錄下生成一個(gè)Tomcat.*的文件目錄,用于"java.io.tmpdir"文件流操作

TomcatEmbeddedServletContainerFactory

2、程序?qū)ξ募牟僮鲿r(shí):會(huì)生成臨時(shí)文件,暫存在臨時(shí)文件中;長(zhǎng)時(shí)間不操作,導(dǎo)致/tmp下面的tomcat臨時(shí)文件目錄被刪除,

且刪除的文件不可恢復(fù),上傳文件時(shí)獲取不到文件目錄,報(bào)錯(cuò)

解決方式有以下幾點(diǎn)

1.重啟服務(wù);

2.網(wǎng)關(guān)是否引入spring-boot-starter-web依賴(lài),若無(wú),則將其引入;

3、設(shè)置spring.servlet.multipart.enabled:true

4.修改上傳文件默認(rèn)的BaseDir

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • @SpringBootConfiguration重復(fù)加載報(bào)錯(cuò)問(wèn)題解決

    @SpringBootConfiguration重復(fù)加載報(bào)錯(cuò)問(wèn)題解決

    @SpringBootApplication?注解的?exclude?屬性用于排除特定的自動(dòng)配置類(lèi),而不是用于排除主配置類(lèi)本身,因此,不能通過(guò)?exclude?屬性來(lái)排除主配置類(lèi)的加載,這篇文章主要介紹了@SpringBootConfiguration重復(fù)加載報(bào)錯(cuò),需要的朋友可以參考下
    2024-08-08
  • java通過(guò)AOP實(shí)現(xiàn)全局日志打印詳解

    java通過(guò)AOP實(shí)現(xiàn)全局日志打印詳解

    最近自己一直再看現(xiàn)有微服務(wù)的日志模塊,發(fā)現(xiàn)就是使用AOP來(lái)做controller層的日志處理,加上項(xiàng)目在進(jìn)行架構(gòu)優(yōu)化,這篇文章主要給大家介紹了關(guān)于java通過(guò)AOP實(shí)現(xiàn)全局日志打印的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • java中將一個(gè)List等分成n個(gè)list的工具方法(推薦)

    java中將一個(gè)List等分成n個(gè)list的工具方法(推薦)

    下面小編就為大家?guī)?lái)一篇java中將一個(gè)List等分成n個(gè)list的工具方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Spring集成Swagger常見(jiàn)錯(cuò)誤及解決辦法

    Spring集成Swagger常見(jiàn)錯(cuò)誤及解決辦法

    這篇文章主要介紹了Spring集成Swagger常見(jiàn)錯(cuò)誤及解決辦法,幫助大家更好的理解和學(xué)習(xí)使用Spring,感興趣的朋友可以了解下
    2021-05-05
  • java連接Mongodb實(shí)現(xiàn)增刪改查

    java連接Mongodb實(shí)現(xiàn)增刪改查

    這篇文章主要為大家詳細(xì)介紹了java連接Mongodb實(shí)現(xiàn)增刪改查,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • IDEA自定義setter和getter格式的設(shè)置方法

    IDEA自定義setter和getter格式的設(shè)置方法

    這篇文章主要介紹了IDEA自定義setter和getter格式的設(shè)置方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-12-12
  • jmeter斷言的三種實(shí)現(xiàn)方式

    jmeter斷言的三種實(shí)現(xiàn)方式

    在使用Jmeter進(jìn)行性能測(cè)試或者接口自動(dòng)化測(cè)試工作中,經(jīng)常會(huì)用到的一個(gè)功能,就是斷言,本文主要介紹了jmeter斷言的三種實(shí)現(xiàn)方式,
    2024-01-01
  • Java中的MapStruct的使用方法代碼實(shí)例

    Java中的MapStruct的使用方法代碼實(shí)例

    這篇文章主要介紹了Java中的MapStruct的使用方法代碼實(shí)例,mapstruct是一種實(shí)體類(lèi)映射框架,能夠通過(guò)Java注解將一個(gè)實(shí)體類(lèi)的屬性安全地賦值給另一個(gè)實(shí)體類(lèi),有了mapstruct,只需要定義一個(gè)映射器接口,聲明需要映射的方法,需要的朋友可以參考下
    2023-10-10
  • Java中關(guān)于子類(lèi)覆蓋父類(lèi)的拋出異常問(wèn)題

    Java中關(guān)于子類(lèi)覆蓋父類(lèi)的拋出異常問(wèn)題

    今天小編就為大家分享一篇關(guān)于Java中關(guān)于子類(lèi)覆蓋父類(lèi)的拋出異常問(wèn)題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • java接口私有方法實(shí)現(xiàn)過(guò)程解析

    java接口私有方法實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了java接口私有方法實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

松潘县| 肇源县| 公主岭市| 交城县| 荥阳市| 盐亭县| 五河县| 叙永县| 札达县| 乌兰浩特市| 连平县| 绿春县| 盱眙县| SHOW| 杭锦后旗| 彭阳县| 宜兴市| 皮山县| 温宿县| 临夏市| 昌宁县| 射洪县| 漯河市| 龙井市| 平江县| 比如县| 廉江市| 奉新县| 南京市| 潼南县| 盐城市| 江川县| 宿松县| 纳雍县| 富裕县| 惠东县| 专栏| 休宁县| 舞钢市| 安宁市| 万全县|