try {
// 获取文件后缀名
String originalFilename = file.getOriginalFilename();
String fileExtension = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
// 判断文件类型并设置对应的字段和保存路径
String filePath;
String fieldType;
if (fileExtension.equals(".exe")) {
filePath = saveFileAndGetPath(file, param, "exe");
fieldType = "Downloadpath";
} else if (fileExtension.equals(".doc") || fileExtension.equals(".docx")) {
filePath = saveFileAndGetPath(file, param, "word");
fieldType = "Manualpath";
} else if (fileExtension.equals(".jpg") || fileExtension.equals(".jpeg") || fileExtension.equals(".png") || fileExtension.equals(".gif")) {
filePath = saveFileAndGetPath(file, param, "img");
fieldType = "Imgurl";
} else {
return ResultVo.error("不支持的文件类型");
}
// 获取id参数
String id = param.getStr("id");
Plugins plugins = pluginsService.getById(id);
// 更新字段
switch (fieldType) {
case "Downloadpath":
plugins.setDownloadpath(filePath);
break;
case "Manualpath":
plugins.setManualpath(filePath);
break;
case "Imgurl":
plugins.setImgurl(filePath);
break;
}
// 更新数据库
pluginsService.updateById(plugins);
// 返回成功信息
ResourceVo vo = new ResourceVo();
vo.setLocation(filePath);
return ResultVo.success(vo);
} catch (IOException e) {
throw Exceptions.Business.ResourceNotSaved("文件保存失败", e);
}
根据上传的后缀名来判断
private String saveFileAndGetPath(MultipartFile file, JSONObject param, String fileType) throws IOException {
// 获取id参数
String id = param.getStr("id");
String vcode = pluginsMapper.findVcode(id);
// 获取资源根路径
String resourcesPath = sysconfService.getSysConfByName("resourcesPath");
if (!StringUtils.hasText(resourcesPath)) {
throw Exceptions.Business.ResourceNotSaved("资源根路径没有配置或值为空,请先正确配置 resourcesPath");
}
// 构建文件存储路径
String subPath = "/" + fileType + "/";
String datetime = DateUtils.getStringDateTime();
String fileExtension = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")).toLowerCase();
String fileName = id + fileExtension;
String filePath = resourcesPath + "/plugin" + subPath + datetime + "/" + fileName;
Path path = Paths.get(filePath);
// 确保目录存在
Files.createDirectories(path.getParent());
// 保存文件
Files.write(path, file.getBytes());
return filePath;
}
然后执行文件保存方法