Spring mvc檔案上傳實現

一隻胡說八道的猴子發表於2020-10-18

Spring mvc檔案上傳實現

jsp頁面客戶端表單編寫

三個要素:
1.表單項type=“file”
2.表單的提交方式:post
3.表單的enctype屬性是多部分表單形式:enctype=“multipart/form-data”
會將表單的資料處理為一條訊息,以標籤為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳檔案。當上傳的欄位是檔案時,會有Content-Type來表名檔案型別;content-disposition,用來說明欄位的一些資訊;由於有boundary隔離,所以multipart/form-data既可以上傳檔案,也可以上傳鍵值對,它採用了鍵值對的方式,所以可以上傳多個檔案。
3.1.當form表單修改為多部分表單時,request.getParameter()將失效。
3.2.enctype=“application/x-www-form-urlencoded”時,form表單的正文內容格式是:key=value&key=value&key=value
3.3.當form表單的enctype取值為Mutilpart/form-data時,請求正文內容就變成多部分形式:

在這裡插入圖片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/quick16" method="post" enctype="multipart/form-data">
    名稱:<input type="text" name="name"><br>
    檔案:<input type="file" name="uploadFile">
    <input type="submit" value="點選提交">
</form>
</body>
</html>

需要匯入的jar座標

<dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

配置檔案上傳解析器

 <bean id="commonsMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--上傳檔案的編碼型別-->
        <property name="defaultEncoding" value="utf-8"></property>
        <!--上傳單個檔案的大小-->
        <property name="maxUploadSizePerFile" value="50000000"></property>
        <!--上傳檔案的總大小-->
        <property name="maxUploadSize" value="54288600"></property>
    </bean>

編寫檔案上傳程式碼

  @RequestMapping(value = "/quick17")
    /* 告訴SpringMvc框架,方法返回的字串不是跳轉是直接在http響應體中返回*/
    @ResponseBody
    public void save17(String username, MultipartFile uploadFile) throws IOException {
       /*獲取原始檔名*/
        String originalFilename = uploadFile.getOriginalFilename();
        /*儲存到伺服器上這裡是本地*/
        uploadFile.transferTo(new File("F:\\upload\\"+originalFilename));
    }

上傳多個檔案

jsp表單程式碼

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/quick18" method="post"
      enctype="multipart/form-data">
    名稱:<input type="text" name="name"><br>
    檔案1:<input type="file" name="uploadFiles">
    檔案2: <input type="file" name="uploadFiles">
    <input type="submit" value="點選提交">
</form>

</body>
</html>

伺服器端程式碼

@RequestMapping(value = "/quick18")
    /* 告訴SpringMvc框架,方法返回的字串不是跳轉是直接在http響應體中返回*/
    @ResponseBody
    public void save18(String username, MultipartFile[] uploadFiles) throws IOException {
        for (MultipartFile uploadFile : uploadFiles) {
            /*獲取原始檔名*/
            String originalFilename = uploadFile.getOriginalFilename();
            /*儲存到伺服器上這裡是本地*/
            uploadFile.transferTo(new File("F:\\upload\\"+originalFilename));
        }
    }

在這裡插入圖片描述

成功儲存到本地

在這裡插入圖片描述

以上就是SpringMVC系列的第三章,主要側重SpringMVC上傳檔案的操作,我後續會持續更新Springmvc系列課程,本部落格主要側重於資料結構於演算法和java開發,覺得我的文章有幫助的小夥伴可以關注我,有疑問可評論私信,相逢即是緣,大家高處見

在這裡插入圖片描述

相關文章