概述
文件上传是Java Web项目中的常用功能,未达到上传文件的目的,需进行下列步骤:
- 表单的method属性必须设置为POST
- 表单的enctype属性必须设置为multipart/form-data(浏览器才会使用二进制流的方式来处理表单数据)
- pom文件中添加commons-fileupload依赖
- 在Spring MVC的配置文件中配置MultipartResolver
文件上传示例
示例程序依然在前文的SpringMVCProject项目中完成(前文连接:https://www.jianshu.com/p/fde4557c527c)。
文件上传页面的背景图片
在项目的webapp目录下创建文件夹“images”,放入一张背景图片,命名为“backImage.jpg”:
backImage.png
POM文件配置
在项目的pom文件中添加commons-fileupload依赖:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
创建JSP文件
在项目的webapp目录下创建uploadfile.jsp文件,编写如下程序:
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>uploadfile</title>
<style type="text/css">
body{
background-image: url(images/backImage.jpg);
background-size:cover;
}
</style>
</head>
<body>
<center>
<h3>文件上传页面</h3>
<br>
<form action="upload" method="post" enctype="multipart/form-data">
<table>
<tr>
<td><label>文件信息:</label></td>
<td><input type="text" name="information"></td>
</tr>
<tr>
<td><label>选择文件:</label></td>
<td><input type="file" name="file"></td>
</tr>
<tr>
<td><input type="submit" id="submit" value="上传"></td>
</tr>
</table>
</form>
</center>
</body>
</html>
创建Controller类
在com.snow.dcl.controller包下创建UploadFileController类文件,编写如下程序:
@Controller
public class UploadFileController {
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public String upload(HttpServletRequest request, @RequestParam("information") String information, @RequestParam("file") MultipartFile file) throws IOException {
if (!file.isEmpty()) {
String path = request.getServletContext().getRealPath("file");
String fileName = file.getOriginalFilename();
File uploadFile = new File(path, fileName);
if (!uploadFile.getParentFile().exists()) {
uploadFile.getParentFile().mkdirs();
}
file.transferTo(new File(path + File.separator + fileName));
return "Success!";
} else {
return "No File!";
}
}
}
在该控制器程序中使用了@ResponseBody注解,可以给前端返回“文件上传成功!”和“未添加上传文件!”的字符串数据,否则在Spring MVC的配置文件springmvc-servlet.xml中配置的是返回视图jsp文件。
springmvc-servlet.xml文件配置
在springmvc-servlet.xml文件中配置MultipartResolver,配置文件增加内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!--spring可以自动扫描base-package设置的包或子包下的java类,如果扫描到有spring相关注解的类,则注册为spring的bean-->
<context:component-scan base-package="com.snow.dcl.controller"/>
<mvc:annotation-driven />
<mvc:default-servlet-handler/>
<!--视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/content/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 上传文件大小20M以内 -->
<property name="maxUploadSize">
<value>20971520</value>
</property>
<!-- 请求的编码格式,必须与JSP文件中的pageEncoding属性值相同 -->
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>
</beans>
- 配置MultipartResolver的同时还添加了mvc的命名空间。
- 添加<mvc:default-servlet-handler/>配置用来处理背景图片等静态资源。
- 添加<mvc:default-servlet-handler/>配置就必须添加<mvc:annotation-driven />否则会出现@Controller注解无法解析的情况,导致请求时候都没有匹配的处理请求类,就都去<mvc:default-servlet-handler/>即default servlet处理了,静态资源(如图片资源)因为没有对应的Controller则会被default servlet处理。
测试
启动TomcatServer,启动完成后,打开浏览器输入:http://localhost:8080/uploadfile.jsp,访问成功。
不添加任何文件,直接提交:
Spring MVC上传03.png
添加测试用的txt文件:
Spring MVC上传02.png
提交:
Spring MVC上传04.png
查看项目目录,在target目录的项目目录下会生成file目录,上传的文件在file目录中:
Spring MVC上传05.png
至此,文件上传功能记录完毕。
网友评论