需求
管理员需要在会议创建阶段上传文件,这一动作需要在管理员专用的网页上进行处理。管理员在进行所有动作之前必须经过口令的验证。单独使用FTP来进行文件的上传将会打断后续的权限管理,所以需要使用SpringBoot实现此功能。
实现
在配置文件application.yml的spring下添加文件传输限制:
文件上传使用了http的multipartFile进行传输,首先创建FileController处理请求,接收客户端上传的文件,并使用FileService处理上传。
@RestController
@RequestMapping("/file")
public class FileController {
@Autowired
private FileService fileService;
@PostMapping("/upload")
public Msg upload(@RequestParam MultipartFile file, int meetingId) {
FileDO fileDO = fileService.uploadFile(file, meetingId);
if (fileDO!=null) {
return new Msg(200,"ok",fileDO);
}
return new Msg("上传失败");
}
}
FileService根据会议讲文件存储到对应的位置,并在数据库中添加记录。
public FileDO uploadFile(MultipartFile file, int meetingId){
if (file.isEmpty()) {
return null;
}
FileDO fileDO = null;
File dir = new File(Integer.toString(meetingId));
if(!dir.exists()){
System.out.println(dir.mkdir());
}
File dest = new File(dir.getPath() +"/"+ file.getOriginalFilename());
try {
file.transferTo(dest);
fileDO = new FileDO(file.getOriginalFilename(),dest.getPath(),meetingId);
fileDao.createFileRecord(fileDO);
} catch (IOException e) {
e.printStackTrace();
}
return fileDO;
}
SQL操作,使用Mybatis处理自增主键。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xhfron.paperless.dao.FileDao">
<insert id="createFileRecord" parameterType="com.xhfron.paperless.bean.FileDO"
keyProperty="uid" useGeneratedKeys="true">
insert into `file`
(`uid`, `name`, `address`, `meeting_id`)
values(uid, #{name}, #{address}, #{meetingId})
</insert>
</mapper>