文章出處
文章列表
文件上傳
配置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
配置文件配置MultipartResolver
,id
屬性必須要有且值只能是multipartResolver
,否則會報錯。
為了讓CommonsMultipartResolver
正常工作,必須先將Jakarta Commons FileUpload
及Jakarta Commons io
的類包添加到類路徑下。
defaultEncoding
必須和用戶JSP
的pageEncoding
屬性一致,以便正確讀取表單內容。
編寫控制器
@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/pjpeg
、text/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>
文章列表
全站熱搜