概述
在使用SpringBoot进行文件上传的时候,一般都会按照如下代码进行,如果没有思路的话,底部有一文章连接,可以参考,如下代码倒是可以实现功能了,但是你会看着有一点乱,我们的想法是迭代一下,让代码更加清晰
@PostMapping
public ResponseEntity changeHeadImg(@RequestParam MultipartFile files, HttpServletRequest request){
/*
1.图片转存
2.路径返回
*/
//获取文件后缀名
String filename = files.getOriginalFilename();
String suffix = filename.substring(filename.lastIndexOf("."));
String imgname = System.currentTimeMillis()+suffix;
// url诸如 2020/10/12
String url = File.separator
+LocalDate.now().getYear()
+File.separator
+LocalDate.now().getMonthValue()
+File.separator
+LocalDate.now().getDayOfMonth()
+File.separator
;
//imgUrl 诸如 2020/10/12/dafdfgeqw.jpg
String imgUrl = url + imgname;
//path 诸如 d:/2020/10/12/dafdfgeqw.jpg
String path = fileStorePath+imgUrl;
File fileStore = new File(fileStorePath+url);
if (!fileStore.exists()){
fileStore.mkdirs();
}
try {
files.transferTo(new File(path));
} catch (IOException e) {
log.info("无法保存用户头像");
e.printStackTrace();
}
FileInfo fileInfo = new FileInfo();
fileInfo.setContentType(request.getContentType());
fileInfo.setSize(files.getSize());
fileInfo.setPath(path);
fileInfo.setUrl(imgUrl);
fileInfo.setType(1);
fileInfo.setCreateTime(LocalDateTime.now());
fileInfo.setUpdateTime(LocalDateTime.now());
//写入到数据库并保存
fileInfoService.save(fileInfo);
return new ResponseEntity(HttpStatus.OK);
}
迭代
迭代的总体思路是,把一些变量抽取出来,一些路上上的变量抽出来成为一个函数,方便公用
private final static String fileStorePath = "d:"+File.separator+"files";
@Override
@Transactional
public MytryFileInfo upload(MultipartFile file) throws IOException {
/*
因为文件的后缀名就使用次数不多,单独写一个变量显得有点多余,
于是就直接通过MultipartFile中直接获取了,这样显得代码比较清晰
*/
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
//原来的url抽取成为了一个 getPath函数,可以看到到处都是getPath函数,更加清晰了
String url = getPath()+System.currentTimeMillis()+suffix;
File fileStore = new File(fileStorePath,getPath());
if (!fileStore.exists()){
fileStore.mkdirs();
}
file.transferTo(new File(fileStorePath,url));
MytryFileInfo mytryFileInfo = new MytryFileInfo();
mytryFileInfo.setPath(fileStorePath+url);
mytryFileInfo.setUrl(url);
//文件类型
mytryFileInfo.setType("1");
mytryFileInfo.setUserId(UserUtil.getCurrentUser().getId());
mytryFileInfoDao.insert(mytryFileInfo);
return mytryFileInfo;
}
private String getPath(){
return File.separator + LocalDate.now().toString().replace("-",File.separator) + File.separator;
}
如下文章,比较适合刚开始练习文件上传
文件上传