一、文件上传
1、表单元素,不能用实体类的属性命名
上传的是文件,属性是字符串,保存文件名
type为file
例如在user/insert.jsp下:
(1)type需要修改为"file"
(2) id="pic" name="pic",id和name不能用实体类的属性命名
<div class="form-group">
<label for="" class="col-sm-2">用户头像</label>
<div class="col-sm-10">
<input type="file" id="pic" name="pic" placeholder="请输入用户头像"
class="form-control" />
</div>
</div>
2、form表单设置属性----enctype="multipart/form-data"
将文件以二进制的形式上传,这样可以实现多种类型的文件上传,可以上传头像等
<form id="form1" enctype="multipart/form-data" class="form-horizontal"
action="users/insert" method="post">
3、controller处理文件上传
(1)MultipartFile是spring类型,org.springframework.web.mutipart包下的接口,代表HTML中form 表单方式上传的文件。名称要与传入的表单一致
(2)getOriginalFileName方法获取的是文件的完整名称(你传入的文件名称)
(3)字符串空值判断
StringUtils.isEmpty(pic.getOriginalFilename())
StringUtils----org.springframework.util.StringUtils;
(4)创建新的文件名
UUID.randomUUID()随机生成一个32位字串----保证文件名的唯一性
(5)保存文件
先获得文件的位置(服务器图片路径)
request.getServletContext()----获得上下文(服务器项目).getRealPath--得到路径
(6)创建文件
文件上传:pic.transferTo(new File(path, newFile))
u.setUface(newFile)----传到uface头像属性
@RequestMapping("/insert")
public String insert(Users u,MultipartFile pic){
try {
System.out.println(pic.getOriginalFilename());
String fname = pic.getOriginalFilename();
if (!StringUtils.isEmpty(pic.getOriginalFilename())) {
//获取文件后缀名
int i = fname.lastIndexOf(".");
String suffix =fname.substring(i);
//创建新的文件名
String newFile = UUID.randomUUID() + suffix;
//保证文件名的唯一性
System.out.println(newFile);
//保存文件
//获取文件路径images(服务器图片路径)
String path = request.getServletContext().getRealPath("/images");
System.out.println("path:" + path);
//创建文件
pic.transferTo(new File(path, newFile));
u.setUface(newFile);
}
//保存数据
us.insert(u);
System.out.println("插入成功");
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "users/list";
}