refactor(storage): 重构本地存储服务的文件上传功能

This commit is contained in:
2026-01-15 15:32:56 +08:00
parent 6c79c5a0d0
commit 40f4657d6f
5 changed files with 47 additions and 18 deletions
@@ -23,11 +23,15 @@ import static cn.odboy.constant.SystemConst.SYMBOL_SUBTRACT;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelUtil;
import cn.odboy.constant.FileTypeEnum;
import cn.odboy.constant.SystemConst;
import cn.odboy.framework.exception.BadRequestException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -42,9 +46,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.IOUtils;
@@ -386,4 +387,15 @@ public final class KitFileUtil extends FileUtil {
public static String getMd5(File file) {
return getMd5(getByte(file));
}
/**
* 获取文件名前缀
*
* @param originalFilename 原始文件名
* @param firstName 首选文件名,如果不为空,则返回
* @return /
*/
public static String getPrefix(String originalFilename, String firstName) {
return StrUtil.isBlank(firstName) ? getPrefix(originalFilename) : firstName;
}
}
@@ -23,6 +23,7 @@ import static cn.odboy.constant.SystemConst.SYMBOL_SUBTRACT;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelUtil;
import cn.odboy.constant.FileTypeEnum;
@@ -386,4 +387,15 @@ public final class KitFileUtil extends FileUtil {
public static String getMd5(File file) {
return getMd5(getByte(file));
}
/**
* 获取文件名前缀
*
* @param originalFilename 原始文件名
* @param firstName 首选文件名,如果不为空,则返回
* @return /
*/
public static String getPrefix(String originalFilename, String firstName) {
return StrUtil.isBlank(firstName) ? getPrefix(originalFilename) : firstName;
}
}
@@ -74,7 +74,7 @@ public class SystemLocalStorageController {
@ApiOperation("上传图片")
@PostMapping("/uploadPicture")
public ResponseEntity<SystemLocalStorageTb> uploadPicture(@RequestParam MultipartFile file) {
SystemLocalStorageTb localStorage = localStorageService.uploadPictureV1(file);
SystemLocalStorageTb localStorage = localStorageService.uploadPicture(file);
return ResponseEntity.ok(localStorage);
}
@@ -16,7 +16,6 @@
package cn.odboy.system.dal.dataobject;
import cn.odboy.base.KitBaseUserTimeTb;
import cn.odboy.util.KitBeanUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -46,8 +45,4 @@ public class SystemLocalStorageTb extends KitBaseUserTimeTb {
private String size;
@ApiModelProperty(value = "日期分组")
private String dateGroup;
public void copy(SystemLocalStorageTb source) {
KitBeanUtil.copyToTarget(source, this);
}
}
}
@@ -22,7 +22,6 @@ import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.util.StrUtil;
import cn.odboy.base.KitPageResult;
import cn.odboy.constant.FileTypeEnum;
import cn.odboy.framework.context.KitSpringBeanHolder;
import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.framework.properties.AppProperties;
import cn.odboy.framework.server.core.KitFileLocalUploadHelper;
@@ -40,11 +39,14 @@ import java.io.File;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@Slf4j
@Service
public class SystemLocalStorageService {
@@ -54,6 +56,9 @@ public class SystemLocalStorageService {
private KitFileLocalUploadHelper fileUploadPathHelper;
@Autowired
private AppProperties properties;
@Lazy
@Autowired
private SystemLocalStorageService localStorageService;
/**
* 上传 -> TestPassed
@@ -75,8 +80,7 @@ public class SystemLocalStorageService {
}
try {
String formatSize = KitFileUtil.getSize(size);
String prefixName =
StrUtil.isBlank(name) ? KitFileUtil.getPrefix(multipartFile.getOriginalFilename()) : name;
String prefixName = KitFileUtil.getPrefix(multipartFile.getOriginalFilename(), name);
SystemLocalStorageTb localStorage = new SystemLocalStorageTb();
localStorage.setRealName(file.getName());
localStorage.setName(prefixName);
@@ -88,6 +92,7 @@ public class SystemLocalStorageService {
systemLocalStorageMapper.insert(localStorage);
return localStorage;
} catch (Exception e) {
log.error("上传文件失败", e);
KitFileUtil.del(file);
throw e;
}
@@ -100,9 +105,7 @@ public class SystemLocalStorageService {
*/
@Transactional(rollbackFor = Exception.class)
public void updateLocalStorageById(SystemLocalStorageTb args) {
SystemLocalStorageTb localStorage = systemLocalStorageMapper.selectById(args.getId());
localStorage.copy(args);
systemLocalStorageMapper.insertOrUpdate(localStorage);
systemLocalStorageMapper.updateById(args);
}
/**
@@ -159,15 +162,22 @@ public class SystemLocalStorageService {
return systemLocalStorageMapper.selectList(wrapper);
}
public SystemLocalStorageTb uploadPictureV1(MultipartFile file) {
/**
* 上传图片
*/
@Transactional(rollbackFor = Exception.class)
public SystemLocalStorageTb uploadPicture(MultipartFile file) {
// 判断文件是否为图片
String suffix = KitFileUtil.getSuffix(file.getOriginalFilename());
if (!FileTypeEnum.IMAGE.getCode().equals(KitFileUtil.getFileType(suffix))) {
throw new BadRequestException("只能上传图片");
}
return KitSpringBeanHolder.getBean(SystemLocalStorageService.class).uploadFile(null, file);
return localStorageService.uploadFile(null, file);
}
/**
* 导出文件上传记录
*/
public void exportLocalStorageXlsx(HttpServletResponse response, SystemQueryStorageArgs args) {
List<SystemLocalStorageTb> systemLocalStorageTbs = this.queryLocalStorageByArgs(args);
List<SystemLocalStorageExportRowVo> rowVos =