SpringMVC_5 SpringMVC实现文件上传
5.1 文件上传之上传原理分析和搭建环境
1.文件上传的必要前提
a)form表的的enctype取值必须是:multipart/form-data,默认是:application/x-www-form-urlencoded
b)method的属性必须是post
c)提供一个文件选择域<input type="file"/>
2.需要导入两个jar包
commons-fileupload
commons-io
5.2 文件上传之传统方式上传代码回顾
控制器
@Controller
@RequestMapping(value = "/user")
public class UserController {
@RequestMapping(path = "/fileupload1")
public String fileupload1(HttpServletRequest request) throws Exception {
System.out.println("文件上传");
//使用fileupload组件完成文件上传
//上传的位置
String path = request.getSession().getServletContext().getRealPath("/uploads/");
//判断,该路径是否存在
File file = new File(path);
if(!file.exists()){
//创建文件夹
file.mkdir();
}
//解析request对象,获取上传文件项目
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//
List<FileItem> items = upload.parseRequest(request);
for(FileItem item:items){
//进行判断
if(item.isFormField()){
//说明普通表单项目
}else{
//说明文件项
//获取上传文件的名称
String filename = item.getName();
//把文件的名称设置唯一值
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid+"_"+filename;
item.write(new File(path, filename));
//删除临时文件
item.delete();
}
}
return "success";
}
}
请求页
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3CHEHGGJ-1575947888413)(C:\Users\00\AppData\Roaming\Typora\typora-user-images\1568106829299.png)]
5.3 Springmvc方式上传文件原理分析
1.springmvc框架体用了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的name属性名称相同
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ciFXaNUu-1575947888415)(C:\Users\00\AppData\Roaming\Typora\typora-user-images\1568108534492.png)]
2.配一个文件解析器:CommonsMultipartResolver
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FwOCjMwx-1575947888415)(C:\Users\00\AppData\Roaming\Typora\typora-user-images\1568108552996.png)]
3.测试代码
//2.spring文件上传方式
@RequestMapping("/fileupload2")
public String fileupload2(HttpServletRequest request, MultipartFile upload) throws IOException {
System.out.println("文件上传2");
//使用fileupload组件完成文件上传
//上传的位置
String path = request.getSession().getServletContext().getRealPath("/uploads/");
//判断,该路径是否存在
File file = new File(path);
if(!file.exists()){
//创建文件夹
file.mkdir();
}
//获取文件上传的名称
String filename = upload.getOriginalFilename();
//唯一值
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid+"_"+filename;
upload.transferTo(new File(path, filename));
return "success";
}
5.4 文件上传之跨服务器上传分析和搭建环境
1.需要jar包两个
jersey-core
jersey-client
2.控制器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kOuXMiai-1575947888416)(C:\Users\00\AppData\Roaming\Typora\typora-user-images\1568129855719.png)]
3.配置文件解析器
<!--4)配置文件解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/><!--以字节为单位-->
</bean>
commons.CommonsMultipartResolver">