SpringMVC提供了文件上傳的功能,使用起來也很方便。
1. 添加Maven相關依賴
SpringMVC文件上傳需要在pom.xml裏添加如下兩個依賴,版本沒關係,別太老就行。
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
2. SpringMVC配置文件添加文件上傳配置
<!-- 支持上傳文件 -->
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
3. JSP上傳代碼
這裏以上傳圖片爲例,至於文件格式校驗,可以用功能豐富的前臺組件,當然也可以寫JS驗證,隨意,這塊就不說了,不是本文的重點,簡單提一下。
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<form action="<%=path%>/fileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="Submit" />
</form>
4. Controller上傳文件處理代碼和圖片讀取代碼
@RequestMapping(value = "/fileUpload")
public String upload(@RequestParam(value = "file", required = true) CommonsMultipartFile file,
HttpServletRequest request, ModelMap model) {
String path = "G:/upload";
String fileName = file.getOriginalFilename();
File targetFile = new File(path, fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
//保存
try {
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
model.addAttribute("fileUrl", fileName);
return "result";
}
@RequestMapping(value = "/readimage")
public void readFile(HttpServletResponse response) throws IOException {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String fileName = request.getParameter("imagepath");
fileName = "G:/upload/" + fileName;
File file = new File(fileName);
if(file.exists()) {
FileInputStream inputStream = new FileInputStream(file);
byte[] data = new byte[(int)file.length()];
inputStream.read(data);
inputStream.close();
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
response.reset();
response.setContentType("application/octet-stream; charset=utf-8");
response.setContentType("image/png");
OutputStream stream = response.getOutputStream();
stream.write(data);
stream.flush();
stream.close();
}
}
5. 上傳成功頁面
<body>
<img alt="" width="100" height="100" src="<%=path%>/readimage?imagepath=${fileUrl }" />
</body>
示例代碼下載:點我