需求
服务端在创建会议时需要上传文件以备开会使用,同样用springboot实现
实现
首先先创建所需的实体类FileDO
public class FileDO {
int uid;
String name;
String address;
int meetingId;
public FileDO() {
}
public FileDO(String name, String address,int meetingId) {
this.name = name;
this.address = address;
this.meetingId = meetingId;
再编写fileController来接受上传文件的请求
@GetMapping("getFileList")
Msg getFileList(@RequestParam int meetingId) {
List<FileDO> files = fileService.getFileList(meetingId);
if (files != null && files.size() > 0) {
return new Msg(200, "success", files);
} else {
return new Msg(200, "文件不存在", null);
}
}
@PostMapping("/upload")
public Msg upload(@RequestParam MultipartFile file,@RequestParam("meetingId") int meetingId) {
FileDO fileDO = fileService.uploadFile(file, meetingId);
if (fileDO!=null) {
return new Msg(200,"ok",fileDO);
}
return new Msg("上传失败");
}
@PostMapping("/delete")
public Msg delete(@RequestParam int fileId){
return new Msg(200,fileService.deleteFile(fileId),null);
}
然后用fileService具体实现上传文件的操作
public FileDO uploadFile(MultipartFile file, int meetingId){
FileDO fileDO = null;
File dir = new File(ROOT_PATH+"/"+Integer.toString(meetingId));
if(!dir.exists()){
dir.mkdir();
}
try {
File dest = new File(dir.getAbsoluteFile()+"/"+file.getOriginalFilename());
if(!dest.exists()){
dest.createNewFile();
}
file.transferTo(dest);
fileDO = new FileDO(file.getOriginalFilename(),dest.getPath(),meetingId);
fileDao.createFileRecord(fileDO);
} catch (IOException e) {
e.printStackTrace();
}
return fileDO;
}
public List<FileDO> getFileList(int meetingId){
return fileDao.getFilesByMeetingId(meetingId);
}
public String deleteFile(int fileId) {
return fileDao.deleteById(fileId)==1?"ok":"not exist";
}
上传文件的流程为:首先创建一个文件路径,检测有无此文件夹,如果有便尝试上传,如果没有便新建一个文件夹,然后尝试上传,,若没有便新建一个此文件,在目录下新建一个文件,将客户端传入的文件数据写入,也会调用dao层,在数据库中添加该文件的记录。
public interface FileDao {
int createFileRecord(FileDO fileDO);
List<FileDO> getFilesByMeetingId(int meetingId);
int deleteById(int fileId);
<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>
<select id="getFilesByMeetingId" resultType="com.xhfron.paperless.bean.FileDO">
select * from file where `meeting_id` = #{meetingId}
</select>
<delete id="deleteById">
delete from `file` where `uid` = #{fileId}
至此一个完整的上传文件功能便得以实现