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

Spring之配置multipartResolver解析器、上傳文件、處理文件過程

 更新時間:2025年08月08日 09:47:33   作者:CrazyIdeas  
文章介紹了Spring中處理multipart表單的兩種解析器(CommonsMultipartResolver和StandardServletMultipartResolver)的配置方法,包括文件大小限制、臨時存儲路徑設置,以及通過enctype和accept屬性控制上傳格式,強調(diào)MultipartFile需配置解析器,而Part接口無需

multipart格式的數(shù)據(jù) 會將 一個表單拆分為 多個部分,每個部分對應一個輸入域。

在一般的表單輸入域中,它所對應的部分中會放置文本型數(shù)據(jù),但是如果上傳文件的話,它所對應的部分可以是二進制。

配置 multipart 解析器:

有兩個:

  • CommonsMultipartResolver:使用 Jakarta Commons FileUpload 解析 multiparty。
  • StandardServletMultipartResolver:依賴于 Servlet 3.0 對 multipart 請求的支持。

配置 StandardServletMultipartResolver 解析器

1、在ApplicationContext 中聲明為 bean:

@Bean
public MultipartResolver multipartResolver(){
    return new StandardServletMultipartResolver();
}

2、在 web.xml 或 Servlet 初始化類中,配置 multipart 的具體細節(jié),如:文件大寫,臨時文件路徑等。

  • 如果已經(jīng)實現(xiàn)了 WebApplicationInitializer 接口,可以在Servlet registration 上調(diào)用 setMultipartConfig() 方法進行配置:
@Override
public void onStartup(ServletContext servletContext) throws ServletException {

    DispatcherServlet dispatcherServlet = new DispatcherServlet();
    ServletRegistration.Dynamic registration = servletContext.addServlet("appServlet", dispatcherServlet);
    registration.addMapping("/");
    registration.setMultipartConfig(new MultipartConfigElement("/tmp/uploads"));
}
  • 若 初始化 類 繼承了AbstractAnnotationConfigDispatcherServletInitializerAbstractDispatcherServletInitializer 通過重寫 customizeRegistration 方法 來配置 multipart 的具體細節(jié)
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
    registration.setMultipartConfig(
            new MultipartConfigElement("/tmp/test/uploads")
    );
}

了解 MultipartConfigElement 類:

new MultipartConfigElement("/tmp/test/uploads",2097152,4194304,0)
  • 指定 臨時存放目錄 為/tmp/test/uploads。
  • 上傳文件的最大容量:2097152 = 2MB。
  • 整個 multipart 請求的最大容量 4194304 = 4MB。
  • 文件大寫 達到一定容量,會寫入 臨時文件路徑中,默認是 0,所有上傳的文件都會寫入磁盤中。

對應 在 web.xml 中的配置:

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <multipart-config>
    	<!-- 臨時路勁 -->
        <location>/tmp/test/uploads</location>
        <!-- 上傳文件的最大值 -->
        <max-file-size>2097152</max-file-size>
        <!--請求的最大容量-->
        <max-request-size>4194304</max-request-size>
    </multipart-config>
</servlet>

配置 CommonsMultipartResolver 解析器

聲明為 bean

@Bean
public MultipartResolver multipartResolver(){
    return new CommonsMultipartResolver();
}

文件大小,臨時路徑等在 聲明Bean 時設置。

 @Bean
public MultipartResolver multipartResolver() throws IOException {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    // 設置 臨時目錄
    multipartResolver.setUploadTempDir(new FileSystemResource("/tmp/test/uploads"));
    // 最大文件
    multipartResolver.setMaxUploadSize(2097152);
    
    multipartResolver.setMaxInMemorySize(0);
    return multipartResolver;
}

上傳文件、處理文件

表單的大體樣式:

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="picture" accept="image/jpeg">
    <input type="submit" value="提交">
</form>
  • enctype="multipart/form-data" 告訴 瀏覽器以 multipart 數(shù)據(jù)的形式提交表單。
  • accept="image/jpeg" 限制文件接收的類型 為 JPEG。

Controller 上接收上傳的文件

@RequestMapping("/upload")
public String uploadImage(@RequestPart("picture")MultipartFile file) throws IOException {
    // 獲取 文件 名
    String filename = file.getOriginalFilename();
    // 將 上傳的文件 寫入到 文件系統(tǒng)中
    file.transferTo(new File("/data/image"+filename));
    return "index";
}
  • MultipartFile 接口,為處理 multipart 數(shù)據(jù)提供了內(nèi)容更為豐富的對象。
public interface MultipartFile extends InputStreamSource {
    String getName();

    @Nullable
    String getOriginalFilename();

    @Nullable
    String getContentType();

    boolean isEmpty();

    long getSize();

    byte[] getBytes() throws IOException;

    InputStream getInputStream() throws IOException;

    default Resource getResource() {
        return new MultipartFileResource(this);
    }

    void transferTo(File var1) throws IOException, IllegalStateException;

    default void transferTo(Path dest) throws IOException, IllegalStateException {
        FileCopyUtils.copy(this.getInputStream(), Files.newOutputStream(dest));
    }
}

可以把 MultipartFile 替換為 Servlet.http.Part

@RequestMapping("/upload")
public String uploadImage(@RequestPart("picture") Part file) throws IOException {
    // 獲取 文件 名
    String filename = file.getSubmittedFileName();
    // 將 上傳的文件 寫入到 文件系統(tǒng)中
    file.write("/data/image"+filename);
    return "index";
}

通過 Part 參數(shù)接收上傳文件,那么沒有必要 配置 MultipartResolver 了。只有使用 MultipartFile 的時候,才需要 配置。

總結(jié)

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

相關文章

  • minio分布式文件管理方式

    minio分布式文件管理方式

    文章介紹了MinIO作為分布式存儲系統(tǒng),支持大文件存儲與數(shù)據(jù)恢復,通過Docker部署并配置多副本存儲,同時涵蓋圖片/視頻上傳、斷點續(xù)傳、格式轉(zhuǎn)換(如AVI轉(zhuǎn)MP4)及xxl-job分布式任務調(diào)度,強調(diào)樂觀鎖機制和補償機制確保任務可靠性與數(shù)據(jù)一致性
    2025-08-08
  • Springboot整合easyexcel實現(xiàn)一個接口任意表的Excel導入導出

    Springboot整合easyexcel實現(xiàn)一個接口任意表的Excel導入導出

    本文主要介紹了Springboot整合easyexcel實現(xiàn)一個接口任意表的Excel導入導出,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • SpringBoot集成 Prometheus進行高效監(jiān)控的實現(xiàn)

    SpringBoot集成 Prometheus進行高效監(jiān)控的實現(xiàn)

    Prometheus作為一個開源的監(jiān)控和告警工具,以其強大的數(shù)據(jù)采集、存儲和查詢能力,受到了眾多開發(fā)者的青睞,本文主要介紹了SpringBoot集成 Prometheus進行高效監(jiān)控的實現(xiàn),感興趣的可以了解一下
    2024-07-07
  • SpringBoot啟動慢的優(yōu)化指南

    SpringBoot啟動慢的優(yōu)化指南

    本摘要基于視頻畫面字幕與關鍵幀整理,視頻主題是 Spring Boot 應用啟動耗時優(yōu)化,核心觀點是:不要一上來盲目加內(nèi)存、換 SSD、改啟動參數(shù),而是先用工具定位啟動鏈路中真正耗時的階段,再針對性優(yōu)化,需要的朋友可以參考下
    2026-06-06
  • 淺談Java四種線程池及new Thread的弊端

    淺談Java四種線程池及new Thread的弊端

    本文主要介紹了淺談Java四種線程池及new Thread的弊端,詳細的介紹了newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor四種的使用,感興趣的可以了解一下
    2024-01-01
  • 深入理解Java中的WeakHashMap

    深入理解Java中的WeakHashMap

    這篇文章主要介紹了深入理解Java中的WeakHashMap,WeakHashMap從名字可以得知主要和Map有關,不過還有一個Weak,我們就更能自然而然的想到這里面還牽扯到一種弱引用結(jié)構(gòu),因此想要徹底搞懂,我們還需要知道四種引用,需要的朋友可以參考下
    2023-09-09
  • 基于java高并發(fā)處理方案

    基于java高并發(fā)處理方案

    這篇文章主要介紹了基于java高并發(fā)處理方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 五個很實用的IDEA使用技巧分享

    五個很實用的IDEA使用技巧分享

    IntelliJ IDEA 是一款優(yōu)秀的 Java 集成開發(fā)環(huán)境,它提供了許多強大的功能和快捷鍵,可以幫助開發(fā)者提高編碼效率和質(zhì)量,本文就在為你介紹博主常用的五個IntelliJ IDEA使用技巧,希望能夠給你帶來一些工作效率上的提升
    2023-10-10
  • Java設計模式之java組合模式詳解

    Java設計模式之java組合模式詳解

    這篇文章主要介紹了JAVA設計模式之組合模式,簡單說明了組合模式的原理,并結(jié)合實例分析了java組合模式的具體用法,需要的朋友可以參考下
    2021-09-09
  • 詳解Spring Kafka中關于Kafka的配置參數(shù)

    詳解Spring Kafka中關于Kafka的配置參數(shù)

    這篇文章主要介紹了詳解Spring Kafka中關于Kafka的配置參數(shù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08

最新評論

崇阳县| 股票| 阿拉善盟| 邻水| 田林县| 三明市| 云南省| 浦江县| 阜南县| 韶山市| 甘洛县| 廊坊市| 阳原县| 江油市| 荆门市| 乌兰察布市| 秦皇岛市| 沁水县| 将乐县| 土默特左旗| 连城县| 南澳县| 甘孜县| 香河县| 界首市| 林州市| 临洮县| 尉氏县| 瑞丽市| 虹口区| 岳阳市| 万荣县| 河东区| 色达县| 乐清市| 饶河县| 嘉黎县| 修水县| 启东市| 三明市| 阿拉善左旗|