关于文件的上传需要两个jar包
关于文件上传form表单的设定
method:必须设定为post方式,因为get请求将参数放在 url 后面,且url后面携带的参数有限制。
enctype:必须设定为“multipart/form-data”,form表单默认为键值对的形式。
1.传统方式文件上传
传统方式上传文件的流程:
- 浏览器端选择文件上传
- 后台接收到请求,进行解析
- 解析后判断是否为上传项
- 若为上传项,进行上传
代码
2. SpringMVC上传文件
SpringMVC中利用dispacherServlet采用多个解析器用来提高开发效率,在文件上传功能中,SpringMVC提供了文件上传解析器 CommonsMultipartResolver,通过这个类,可以解析浏览器上传的文件请求,为用户省略了解析上传请求这一流程,提高了开发效率。
- 上传界面
<--! 注意这里的name值,必须与后面处理上传请求的方法接收的参数相同 !-->
<form action="file/fileupload2" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload"><br>
<input type="submit" value="上传" >
</form>
- 配置文件上传解析器
<!-- 这里的bean的id 必须为 multipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--这里还可以设置一些参数,如:文件上传大小的限制 -->
</bean>
- 处理上传的方法
@RequestMapping("/fileupload2")
public String fileUpload2(HttpServletRequest request, MultipartFile upload) throws Exception {
String path = request.getSession().getServletContext().getRealPath("/uploads/");
File file = new File(path);
if (!file.exists()){
file.mkdir();
}
// 获得到文件名
String filename = upload.getOriginalFilename();
filename = UUID.randomUUID().toString().replace("-","") + filename;
// 进行上传文件,上传结束之后,会自动删除掉临时文件
upload.transferTo(new File(path,filename));
return "success";
}
发现比传统方式上传高效了很多,SpringMVC的文件上传解析器已经帮用户解析了上传请求。