ssm框架中文件上传实现秒传
1 认识秒传
文件上传时:当文件已经在服务器存在,直接使用已存在的文件的目录,告诉客户端文件上传完毕
怎么判断两个文件是否完全相同:通过uuid/Md5获取文件的唯一标识码
2 这里通过uuid作为文件的唯一标识码来实现秒传
2.0 数据库
CREATE TABLE student (
sid int(11) NOT NULL AUTO_INCREMENT,
sname varchar(11) DEFAULT NULL,
sbirthday date DEFAULT NULL,
fname varchar(100) DEFAULT NULL
)
CREATE TABLE tab_file(
fname VARCHAR(100) PRIMARY KEY,
fuuid VARCHAR(100)
);
2.1 先创建两个实体类,一个表示客户端,一个存储文件的信息
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private Integer sid;
private String sname;
@DateTimeFormat(pattern="yyyy-MM-SS")
private Date sbirthday;
private String fname;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MyFile implements Serializable{
private String fname;
private String fuuid;
}
2.2 文件域上传表单
<!-- 注册用户信息 -->
<form action="<c:url value='/student/addOne.action'/>" method="post" enctype="multipart/form-data" id="form_666">
<table>
<tr>
<th>学生名字:</th>
<td><input type="text" name="sname"/><span id="span_sname"></span></td>
</tr>
<tr>
<th>学生生日:</th>
<td><input type="text" name="sbirthday" placeholder="格式:yyyy年MM月dd日"/></td>
</tr>
<tr>
<th>学生头像:</th>
<td><input type="file" name="sphoto_file"/></td>
</tr>
<tr>
<th colspan="2"><input type="submit" value="学生添加"/></th>
</tr>
</table>
</form>
2.3 在springmvc.xml中注册多部件表单解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/>
</bean>
2.4 在web.xml中配置文件上传的位置
<context-param>
<param-name>upload_path</param-name>
<param-value>C:\Users\Administrator\Desktop\upload</param-value>
</context-param>
2.5 action
@RequestMapping("/addOne.action")
public String addOneMethod(Student stu,@RequestParam("sphoto_file")MultipartFile file,HttpServletRequest req) throws Exception{
String fuuid=UUID.nameUUIDFromBytes(file.getBytes()).toString();
MyFile myFile=myFileService.getOneByFuuid(fuuid);
String fileName;
if (myFile==null) {
fileName=file.getOriginalFilename();
fileName=System.currentTimeMillis()+"_"+fileName;
String path=req.getServletContext().getInitParameter("upload_path");
File fileMuDi=new File(path,fileName);
file.transferTo(fileMuDi);
myFile=new MyFile(fileName, fuuid);
myFileService.addOne(myFile);
req.setAttribute("message", "文件上传成功!注册成功!");
}else{
req.setAttribute("message", "<文件秒传成功!注册成功!>");
}
stu.setFname(myFile.getFname());
studentService.addOne(stu);
return "forward:/student/getAll.action";
}
2.6 添加service
@Service
public class StudentServiceImp implements StudentService{
...
@Override
public int addOne(Student stu) {
Student studentDb=studentMapper.getOneBySname(stu.getSname());
if(studentDb!=null){
throw new StudentCrudException("学生名字错误!");
}
return studentMapper.addOne(stu);
}
}
@Service
public class MyFileServiceImp implements MyFileService{
@Autowired
private MyFileMapper myFileMapper;
public MyFile getOneByFuuid(String fuuid) {
return myFileMapper.getOneByFuuid(fuuid);
}
public int addOne(MyFile mf) {
return myFileMapper.addOne(mf);
}
}
2.7 mapper 数据库的操作 略