博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC学习笔记——文件上传
阅读量:6586 次
发布时间:2019-06-24

本文共 2757 字,大约阅读时间需要 9 分钟。

1.实现文件上传首先需要导入Apache的包,commons-fileupload-1.2.2.jar和commons-io-2.1.jar

  实现上传就在add.jsp文件中修改表单

enctype="multipart/form-data"和  附件:

 完整的add.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
Insert title here
用户名:
用户密码:
用户昵称:
用户邮箱:
附件:

 

2.在user-servlet.xml中配置上传文件

 

3.在控制器中修改add()方法

//在具体添加用户的时候,是POST请求,就访问以下代码	@RequestMapping(value="/add",method=RequestMethod.POST)	public String add(@Validated User user,BindingResult br,MultipartFile attach,HttpServletRequest req) throws IOException{//一定要紧跟@Validated之后写验证结果类		if(br.hasErrors()){			//如果有错误,直接跳转到add视图			return "user/add";		}		String realpath = req.getSession().getServletContext().getRealPath("/resources/upload"); 	//取得会话对象的路径		System.out.println(realpath);		File f = new File(realpath+"/"+attach.getOriginalFilename());		FileUtils.copyInputStreamToFile(attach.getInputStream(), f);		System.out.println(attach.getName()+","+attach.getOriginalFilename()+","+attach.getContentType());		users.put(user.getUsername(),user);	//把key和user对象放进Map中		return "redirect:/user/users";	}

 

 还需要在resources文件夹下面添加upload文件夹

在表单中添加文件上传后如下图

 

 

如果要上传多个文件的话,修改add.jsp中的表单,注意是attachs和控制器中的attachs对应

				附件:											

 

修改控制器中的add()方法,把MultipartFile改为数组,attachs对应,@RequestParam("attachs")必不可少

//在具体添加用户的时候,是POST请求,就访问以下代码	@RequestMapping(value="/add",method=RequestMethod.POST)	public String add(@Validated User user,BindingResult br,@RequestParam("attachs")MultipartFile[] attachs,HttpServletRequest req) throws IOException{//一定要紧跟@Validated之后写验证结果类		if(br.hasErrors()){			//如果有错误,直接跳转到add视图			return "user/add";		}		String realpath = req.getSession().getServletContext().getRealPath("/resources/upload"); 	//取得会话对象的路径		System.out.println(realpath);		for(MultipartFile attach:attachs){			if(attach.isEmpty()){		//检查上传多个文件的时候,每个文件是否为空,否则会在copy的时候出错				continue;			}			File f = new File(realpath+"/"+attach.getOriginalFilename());			FileUtils.copyInputStreamToFile(attach.getInputStream(), f);			System.out.println(attach.getName()+","+attach.getOriginalFilename()+","+attach.getContentType());		}		users.put(user.getUsername(),user);	//把key和user对象放进Map中		return "redirect:/user/users";	}

 

 

上面添加多个文件的时候,还检测了文件是否为空,为空的话就跳过

if(attach.isEmpty()){				continue;			}

 注意:在这个简单的上传文件的例子中,如果上传的文件和已经存在的文件同名的话,会进行覆盖

转载地址:http://qbhno.baihongyu.com/

你可能感兴趣的文章
0712 - 坚守,加强老本
查看>>
MarkDown语法
查看>>
这么说吧,NIO很简单,其实就是个牛逼IO
查看>>
七、【应用的主要框架】
查看>>
使用Python快速获取公众号文章定制电子书(二)
查看>>
weak和assign的区别
查看>>
iOS下JS与OC互相调用(七)--Cordova 基础
查看>>
两列自适应布局方案整理
查看>>
测试本地node包
查看>>
Three.js 关于立方体贴图产生边缘锯齿问题
查看>>
自己动手,在macOS High Sierra中编译一个可debug的JDK
查看>>
用掘金-Markdown 编辑器写文章
查看>>
一文搞懂前端对象的深拷贝与浅拷贝
查看>>
Like Sunday, Like Rain - JavaScript运算符优先级
查看>>
Nacos v0.7.0:对接CMDB,实现基于标签的服务发现能力
查看>>
Android播放器基础封装库PlayerBase
查看>>
最大熵模型
查看>>
【开发问题记录①】关于滑动CollectionView时ContentSize变化的问题
查看>>
一篇搞定导航守卫(vue-router源码学习)
查看>>
纯前端控件集 WijmoJS 2018V2发布,提供可视化设计器,在React、Vue和Angular中的更易用...
查看>>