SpringMVC实现文件上传
文件上传的必要前提
文件上传原理
第三方组件实现文件上传
传统文件上传方式
1.导入依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
2.前端代码
<form action="user/fileUpLoad1" method="post" enctype="multipart/form-data">
选择文件:<input type="file" value="选择文件" name="upload"><br>
<input type="submit" value="上传">
</form>
3.后端代码
@RequestMapping("/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.mkdirs();
}
//解析request文件,获取上传文件项
DiskFileItemFactory factory = new DiskFileItemFactory(); //磁盘文件工厂对象:用于创建磁盘文件对象
ServletFileUpload upload = new ServletFileUpload(factory); //利用工厂,加载上传文件,创建磁盘文件对象
//解析request
List<FileItem> fileItems = upload.parseRequest(request);
for(FileItem item : fileItems){
//拿到每一个文件对象
//进行判断,当前item是否为上传文件项,也可能是上传表单项(如username=xx)
if(item.isFormField()){ //普通表单项
}else{ //上传文件项
String fileName = item.getName();
//把文件名称设置为唯一值
fileName = UUID.randomUUID().toString().replace("-","")+"_"+fileName;
item.write(new File(path,fileName));
System.out.println(path+fileName);
//删除临时文件
item.delete();
}
}
return "success";
}
SpringMVC上传文件
1.SpringMVC中配置文件解析器
<!--配置文件解析器对象,id不能更改必须为此-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"></property> <!--最大上传文件大小,单位:字节-->
</bean>
2.后端代码
@RequestMapping("/fileUpLoad2")
public String fileUpLoad2(HttpServletRequest request,MultipartFile upload) throws Exception{
System.out.println("SpringMVC上传");
File file = new File(request.getSession().getServletContext().getRealPath("/uploads/"));
if(!file.exists()) file.mkdirs();
System.out.println(file.getPath());
//获取文件名称
String fileName = upload.getOriginalFilename();
//变为唯一值
fileName = UUID.randomUUID().toString().replace("-","")+"_"+fileName;
//上传文件
upload.transferTo(new File(file,fileName));
return "success";
}
``