文件的上传需要使用post请求,且enctype
需为multipart/form-data
(分段数据)
<form th:action="@{/testUp}" method="post" enctype="multipart/form-data"> </form>
@RequestMapping("/testUp") public String testUp(MultipartFile phone) { System.out.println(phone.getName()); System.out.println(phone.getOriginalFilename()); return "success"; }
<!--需要在SpringMVC配置文件中配置文件上传解析器--> <!--注意:id必须叫multipartResolver--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
上传
@RequestMapping("/testUp") public String testUp(MultipartFile phone,HttpSession session) throws IOException { //通过session创建servletContext对象 ServletContext servletContext = session.getServletContext(); // 通过servletContext对象获取photo的真实路径 String realPath = servletContext.getRealPath("/photo"); // 判断路径是否存在,如果不存在则创建相对应的路径。 File file = new File(realPath); if(!file.exists()){ file.mkdir(); } // 获取文件名 String name = phone.getOriginalFilename(); // 拼接路径 String path=realPath+File.separator+name; // 上传 phone.transferTo(new File(path)); return "success"; }
// 获取文件名 String filename = phone.getOriginalFilename(); // 解决重名问题,使用UUID作为文件名 // 获取文件的后缀 String suffixName = filename.substring(filename.lastIndexOf(".")); // 将UUID转换为String类型 String uuid = UUID.randomUUID().toString(); // 获取新的文件名 String realFileName=uuid+suffixName;
创建一个类去实现HandlerInterceptor
,并重写三个方法。
public class TestInterceptor implements HandlerInterceptor{}
SpringMVC
的在配置文件中注册拦截器
<!-- 配置拦截器--> <mvc:interceptors> <bean class="com.boerk.mvc.interceptor.TestInterceptor"></bean> </mvc:interceptors> <!-- 或者--> <mvc:interceptors> <ref bean="testInterceptor"></ref> </mvc:interceptors>
也可以使用拦截器拦截指定的路径
<mvc:interceptor> <!--拦截所有请求--> <mvc:mapping path="/**"/> <!--排除前往主页的请求--> <mvc:exclude-mapping path="/"/> <ref bean="testInterceptor"></ref> </mvc:interceptor>