大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 SpringMVC上傳文件的方法

SpringMVC上傳文件的方法

更新時間:2022-11-07 09:53:45 來源:動力節點 瀏覽1392次

在本SpringMVC教程中,我們將重點介紹 Spring 為Web 應用程序中的多部分(文件上傳)支持提供的功能。

Spring 允許我們使用可插入的MultipartResolver對象啟用這種多部分支持。該框架提供了一個用于Commons FileUpload的MultipartResolver實現和另一個用于Servlet 3.0多部分請求解析的實現。

配置MultipartResolver后,我們將看到如何上傳單個文件和多個文件。

我們還將涉及Spring Boot。

1.共享文件上傳

要使用CommonsMultipartResolver處理文件上傳,我們需要添加以下依賴項:

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

現在我們可以在 Spring 配置中定義CommonsMultipartResolver bean。

這個MultipartResolver帶有一系列set方法來定義屬性,例如上傳的最大大小:

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(100000);
    return multipartResolver;
}

這里我們需要在 Bean 定義本身中控制CommonsMultipartResolver的不同屬性。

2. 使用Servlet 3.0

為了使用Servlet 3.0多部分解析,我們需要配置幾個應用程序。

首先,我們需要在DispatcherServlet注冊中設置一個MultipartConfigElement:

public class MainWebAppInitializer implements WebApplicationInitializer {
    private String TMP_FOLDER = "/tmp"; 
    private int MAX_UPLOAD_SIZE = 5 * 1024 * 1024;     
    @Override
    public void onStartup(ServletContext sc) throws ServletException {        
        ServletRegistration.Dynamic appServlet = sc.addServlet("mvc", new DispatcherServlet(
          new GenericWebApplicationContext()));
        appServlet.setLoadOnStartup(1);        
        MultipartConfigElement multipartConfigElement = new MultipartConfigElement(TMP_FOLDER, 
          MAX_UPLOAD_SIZE, MAX_UPLOAD_SIZE * 2, MAX_UPLOAD_SIZE / 2);       
        appServlet.setMultipartConfig(multipartConfigElement);
    }
}

在MultipartConfigElement對象中,我們配置了存儲位置、最大單個文件大小、最大請求大小(在單個請求中有多個文件的情況下)以及文件上傳進度刷新到存儲位置的大小。

這些設置必須在 servlet 注冊級別應用,因為Servlet 3.0不允許像CommonsMultipartResolver那樣在MultipartResolver中注冊它們。

完成后,我們可以將StandardServletMultipartResolver添加到 Spring 配置中:

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

3. 上傳文件

要上傳我們的文件,我們可以構建一個簡單的表單,在該表單中使用帶有type='file'的 HTML輸入標簽。

無論我們選擇哪種上傳處理配置,我們都需要將表單的編碼屬性設置為multipart/form-data。

這讓瀏覽器知道如何對表單進行編碼:

<form:form method="POST" action="/spring-mvc-xml/uploadFile" enctype="multipart/form-data">
    <table>
        <tr>
            <td><form:label path="file">Select a file to upload</form:label></td>
            <td><input type="file" name="file" /></td>
        </tr>
        <tr>
            <td><input type="submit" value="Submit" /></td>
        </tr>
    </table>
</form>

要存儲上傳的文件,我們可以使用MultipartFile變量。

我們可以從控制器方法中的請求參數中檢索此變量:

@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public String submit(@RequestParam("file") MultipartFile file, ModelMap modelMap) {
    modelMap.addAttribute("file", file);
    return "fileUploadView";
}

MultipartFile類提供對上傳文件的詳細信息的訪問,包括文件名、文件類型等。

我們可以使用一個簡單的 HTML 頁面來顯示這些信息:

<h2>Submitted File</h2>
<table>
    <tr>
        <td>OriginalFileName:</td>
        <td>${file.originalFilename}</td>
    </tr>
    <tr>
        <td>Type:</td>
        <td>${file.contentType}</td>
    </tr>
</table>

4.上傳多個文件

要在單個請求中上傳多個文件,我們只需在表單中放置多個輸入文件字段:

<form:form method="POST" action="/spring-mvc-java/uploadMultiFile" enctype="multipart/form-data">
    <table>
        <tr>
            <td>Select a file to upload</td>
            <td><input type="file" name="files" /></td>
        </tr>
        <tr>
            <td>Select a file to upload</td>
            <td><input type="file" name="files" /></td>
        </tr>
        <tr>
            <td>Select a file to upload</td>
            <td><input type="file" name="files" /></td>
        </tr>
        <tr>
            <td><input type="submit" value="Submit" /></td>
        </tr>
    </table>
</form:form>

我們需要注意每個輸入字段具有相同的名稱,以便可以將其作為MultipartFile的數組進行訪問:

@RequestMapping(value = "/uploadMultiFile", method = RequestMethod.POST)
public String submit(@RequestParam("files") MultipartFile[] files, ModelMap modelMap) {
    modelMap.addAttribute("files", files);
    return "fileUploadView";
}

現在我們可以簡單地遍歷該數組以顯示文件信息:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
    <head>
        <title>Spring MVC File Upload</title>
    </head>
    <body>
        <h2>Submitted Files</h2>
        <table>
            <c:forEach items="${files}" var="file">    
                <tr>
                    <td>OriginalFileName:</td>
                    <td>${file.originalFilename}</td>
                </tr>
                <tr>
                    <td>Type:</td>
                    <td>${file.contentType}</td>
                </tr>
            </c:forEach>
        </table>
    </body>
</html>

5. 上傳帶有附加表單數據的文件

我們還可以將附加信息與正在上傳的文件一起發送到服務器。

我們只需在表單中包含必填字段:

<form:form method="POST" 
  action="/spring-mvc-java/uploadFileWithAddtionalData"
  enctype="multipart/form-data">
    <table>
        <tr>
            <td>Name</td>
            <td><input type="text" name="name" /></td>
        </tr>
        <tr>
            <td>Email</td>
            <td><input type="text" name="email" /></td>
        </tr>
        <tr>
            <td>Select a file to upload</td>
            <td><input type="file" name="file" /></td>
        </tr>
        <tr>
            <td><input type="submit" value="Submit" /></td>
        </tr>
    </table>
</form:form>

在控制器中,我們可以使用@RequestParam注解獲取所有表單數據:

@PostMapping("/uploadFileWithAddtionalData")
public String submit(
  @RequestParam MultipartFile file, @RequestParam String name,
  @RequestParam String email, ModelMap modelMap) {
    modelMap.addAttribute("name", name);
    modelMap.addAttribute("email", email);
    modelMap.addAttribute("file", file);
    return "fileUploadView";
}

與前面部分類似,我們可以使用帶有JSTL標記的 HTML 頁面來顯示信息。

我們也可以封裝模型類中的所有表單字段并使用@ModelAttribute注釋在控制器。這將是有用的,當有很多額外的字段以及文件。

讓我們看一下代碼:

public class FormDataWithFile {
    private String name;
    private String email;
    private MultipartFile file;
    // standard getters and setters
}
@PostMapping("/uploadFileModelAttribute")
public String submit(@ModelAttribute FormDataWithFile formDataWithFile, ModelMap modelMap) {
    modelMap.addAttribute("formDataWithFile", formDataWithFile);
    return "fileUploadView";
}

6.Spring引導文件上傳

如果我們使用Spring的引導,到目前為止,我們看到的所有東西都仍然適用。

然而,Spring引導使其更容易配置和啟動一切麻煩。

特別是,它沒有必要配置啟動以來的任何servlet將注冊和配置它對于我們來說,如果我們在依賴關系包括web模塊:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.7.2</version>
</dependency>

我們能找到的最新版本spring-boot-starter-web Maven中央。

如果我們想控制最大文件上傳大小,我們可以編輯我們的application.properties:

spring.servlet.multipart.max-file-size=128KB
spring.servlet.multipart.max-request-size=128KB

我們還可以控制是否啟用文件上傳以及文件上傳的位置:

spring.servlet.multipart.enabled=true
spring.servlet.multipart.location=${java.io.tmpdir}

請注意,我們使用${java.io.tmpdir}來定義上傳位置,以便我們可以將臨時位置用于不同的操作系統。如果大家想了解更多相關知識,不妨來關注一下本站的SpringMVC視頻教程,里面的課程內容細致全面,通俗易懂,很適合小白學習,希望對大家能夠有所幫助哦。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 深夜免费在线观看 | 四虎网站最新网址 | 国产亚洲欧美久久精品 | 四虎在线永久免费视频网站 | 久久久亚洲欧美综合 | 亚洲一片 | 久久久国产精品视频 | 国产精品亚洲一区二区麻豆 | 国产在线精彩视频二区 | 天天操夜夜爱 | 国内精品久久久久久久久久久久 | 久久婷婷久久一区二区三区 | 玖玖99视频 | 九九久久精品国产 | 欧美亚洲另类综合 | 国产成人8x视频一区二区 | 黄黄的网站在线观看 | 深夜福利网址 | 91精品免费在线观看 | 国产永久免费高清动作片www | 91久久香蕉国产线看 | 亚洲综合久久久久久中文字幕 | 黄片123 | 国产极品嫩模大尺度福利视频 | 国产成人18黄禁网站免费观看 | 国内自拍网红在线综合 | 国产精品久久国产精麻豆99网站 | 婷婷网五月天天综合天天爱 | 日本激情啪啪 | 国产小视频在线观看免费 | 99热久久这里只有精品在 | 91大学生视频 | 高清欧美一区二区三区 | 色婷婷综合网 | 精品一区二区久久久久久久网站 | 婷婷春色 | 国产精品精品视频 | 夜夜做日日做夜夜爽 | 九九成人免费视频 | 欧美综合图 | 国产精品久久久久影院色老大 |