1. 程式人生 > >Spring MVC實現MultipartFile檔案上傳功能

Spring MVC實現MultipartFile檔案上傳功能

前端

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>修改資訊</title>
</head>
<body>
    <form action="/shop/updateUserinfo" enctype="multipart/form-data" method="post">
        <table>
            <tr>
                <
td
>
請選擇頭像:</td> <td><input type="file" name="image" /></td> </tr> <tr> <td><input type="submit" name="submit" value="提交"/></td> <td><input type="reset" name="reset" value
="重置"/>
</td> </tr> </table> </form> </body> </html>

注意:
1.檔案選擇標籤type=“file”
2.要定義enctype=“multipart/form-data”,以二進位制流傳輸,否則Spring MVC解析失敗
3.檔案提交以POST請求為主


後臺

控制器實現

@RequestMapping(value = "/updateUserinfo", method = RequestMethod.
POST) @ResponseBody public String updateUserinfo(MultipartFile file) throws IOException { // file是通過Spring MVC自動對映HTTP請求同名引數獲取的 if (!file.isEmpty()) { // 得到的是引數名 image log.info(file.getName()); // 得到的是圖片原來的名字如:1234.png log.info(file.getOriginalFilename()); log.info(file.getSize()); // 要儲存圖片到的路徑和名字 String imageUrl = "/home/lin/" + "store.png"; // 將上傳檔案儲存到相應位置 file.transferTo(new File(imageUrl()); } return ""; }

MultipartFile是一個Spring MVC提供的一個類,因此還需要相應的解析器----MultipartResolver

MultipartResolver配置

MultipartResolver只是一個介面, 它有兩個實現類

  1. CommonsMultipartResolver,依賴Apache下的jakarta包
  2. StandardServletMultipartResolver, 依賴Servlet3.0+, 不需要第三方包 【推薦】

在Spring MVC容器配置檔案中加入以下即可

<!-- 上傳檔案 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>

然後在web.xml裡面配置其初始化屬性(在Spring MVC的dispatcer servlet中)

  <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <multipart-config>
            <!--臨時檔案的目錄-->
            <location>/home/lin/</location>
            <!-- 上傳檔案最大2M -->
            <max-file-size>2097152</max-file-size>
            <!-- 上傳檔案整個請求不超過4M -->
            <max-request-size>4194304</max-request-size>
        </multipart-config>
    </servlet>

雖然web.xml檔案會報錯,提示not allow here / can not resolve,但是不影響使用。而且如果不配就無法使用。