大战熟女丰满人妻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視頻教程,里面的課程內容細致全面,通俗易懂,很適合小白學習,希望對大家能夠有所幫助哦。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美中文字幕在线观看 | 夜夜天堂 | 中文字幕日韩视频 | 国产色婷婷精品综合在线 | 狠狠躁夜夜躁人人爽天天段 | 中中文字幕乱码 | 亚洲精品久久久久福利网站 | 久久精品夜色国产 | 欧美一级片网址 | 成人欧美日韩高清不卡 | 成人在线免费网站 | 午夜影院在线 | 欧美α片无限看在线观看免费 | 四虎影院网址大全 | 欧美激情在线精品三区 | 欧美曰韩一区二区三区 | 九九精品热 | 97国产精品国产品国语字幕 | 欧美成人老熟妇暴潮毛片 | 色爱综合网欧美 | 日日天干夜夜人人添 | 九九99靖品 | 我要看免费一级毛片 | 欧日韩在线不卡视频 | 91在线 | 欧美 | 中文字幕一区二区在线观看 | 4虎影院午夜在线观看 | 亚洲精品综合久久中文字幕 | 四只虎免费永久观看地址 | 一区二区不卡久久精品 | 浮力影院欧美三级日本三级 | 久色国产| 一道本一区二区三区 | 亚洲一区视频在线 | 国产成人久久 | 久久久精品久久久久三级 | 狠狠鲁狠狠操 | 日韩国产欧美一区二区三区在线 | 午夜久久久久久网站 | 青青青免费在线视频 | 欧美真人毛片动作视频 |