文章出處

文件上傳

配置MultipartResolver

<bean id="multipartResolver" 
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="utf-8" />
    <property name="maxUploadSize" value="5242880" />
</bean>

dispatcher-servlet.xml配置文件配置MultipartResolverid屬性必須要有且值只能是multipartResolver,否則會報錯。

為了讓CommonsMultipartResolver正常工作,必須先將Jakarta Commons FileUploadJakarta Commons io的類包添加到類路徑下。

defaultEncoding必須和用戶JSPpageEncoding屬性一致,以便正確讀取表單內容。

編寫控制器

@Controller
@RequestMapping("demo")
public class DemoController {
    @RequestMapping("/upload")
    public String upload(HttpServletRequest request,
                         @RequestParam("file") MultipartFile file) throws Exception {
        if (!file.isEmpty()) {
            file.transferTo(new File("F:/" + file.getOriginalFilename()));
            request.setAttribute("info", "上傳成功!");
        } else {
            request.setAttribute("info", "上傳失敗!");
        }
        return "message";
    }
}

Spring MVC 會將上傳文件綁定到MultipartFile對象中。MultipartFile常用方法說明:

  • byte [] getBytes():獲取文件數據。
  • String getContentType():獲取文件MIME類型,如image/pjpegtext/plain等。
  • InputStream getInputStream():獲取文件流。
  • String getName():獲取表單中文件組件的名字。
  • String getOriginalFileName():獲取上傳文件的原名。
  • long getSize():獲取上傳文件的字節大小,單位是byte
  • boolean isEmpty():是否有上傳的文件。
  • void transferTo(File dest):可以使用該文件將上傳的文件保存到一個目標文件中。

編寫文件上傳表單頁面

<html>
<head>
    <title>Spring MVC 文件上傳</title>
</head>
<body>
    <h2>請選擇文件:</h2>
    <form method="post" action="${basePath}demo/upload"
          enctype="multipart/form-data">
        <input type="file" name="file" />
        <input type="submit" />
    </form>
</body>
</html>

負責上傳文件的表單和一般表單有一些區別,表單的類型編碼必須是multipart/form-data類型。

問題

問題一

異常信息

java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory

原因及解決方法

缺少commons-fileupload-x.x.x.jar文件。目前(2016年9月06日)最新版本是1.3.2。

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

問題二

異常信息:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
原因及解決方法:

配置MultipartResolver時未添加添加id屬性或者id屬性的值不是multipartResolver

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="utf-8" />
    <property name="maxUploadSize" value="5242880" />
</bean>

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()