Browse Source

refactor(upload): 统一文件存储命名策略为 {uuid}.{后缀}

- 存储文件名由 {uuid}.{原始文件名} 改为 {uuid}.{扩展名},避免同名文件互相覆盖
- 新增 fileRealName 字段保存原始文件名,filename 字段统一存储实际存储名
- 移除 LocalUpDownloader 中二次添加 uuid 前缀的逻辑,避免产生 uuid@uuid.后缀 格式
- 清理未使用的 MyCommonUtil 导入,将通配符导入替换为具体类导入
main-stable
chenchuchuan 12 hours ago
parent
commit
91791451cf
  1. 11
      common/common-core/src/main/java/apelet/common/core/upload/BaseUpDownloader.java
  2. 11
      common/common-core/src/main/java/apelet/common/core/upload/LocalUpDownloader.java

11
common/common-core/src/main/java/apelet/common/core/upload/BaseUpDownloader.java

@ -80,11 +80,16 @@ public abstract class BaseUpDownloader {
} else { } else {
downloadUri = serviceContextPath + uri + "/download"; downloadUri = serviceContextPath + uri + "/download";
} }
// 存储名统一为 {uuid}.{后缀},各存储实现直接使用,避免同名文件互相覆盖。
String extension = FilenameUtils.getExtension(originalFilename);
StringBuilder filenameBuilder = new StringBuilder(64); StringBuilder filenameBuilder = new StringBuilder(64);
filenameBuilder.append(MyCommonUtil.generateUuid()) filenameBuilder.append(MyCommonUtil.generateUuid());
.append(".").append(originalFilename); if (StringUtils.isNotBlank(extension)) {
filenameBuilder.append(".").append(extension);
}
responseInfo.setDownloadUri(downloadUri); responseInfo.setDownloadUri(downloadUri);
responseInfo.setFilename(originalFilename); responseInfo.setFileRealName(originalFilename);
responseInfo.setFilename(filenameBuilder.toString());
} }
/** /**

11
common/common-core/src/main/java/apelet/common/core/upload/LocalUpDownloader.java

@ -2,7 +2,6 @@ package apelet.common.core.upload;
import apelet.common.core.constant.ErrorCodeEnum; import apelet.common.core.constant.ErrorCodeEnum;
import apelet.common.core.exception.MyRuntimeException; import apelet.common.core.exception.MyRuntimeException;
import apelet.common.core.util.MyCommonUtil;
import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.BooleanUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -15,7 +14,10 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.*; import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
@ -121,9 +123,8 @@ public class LocalUpDownloader extends BaseUpDownloader {
try { try {
byte[] bytes = uploadFile.getBytes(); byte[] bytes = uploadFile.getBytes();
StringBuilder sb = new StringBuilder(256); StringBuilder sb = new StringBuilder(256);
String s = MyCommonUtil.generateUuid() + "@" + responseInfo.getFilename(); // fillUploadResponseInfo 已生成 {uuid}.{后缀},此处直接使用,不再二次加前缀(否则会出现 uuid@uuid.后缀)。
responseInfo.setFileRealName(responseInfo.getFilename()); String s = responseInfo.getFilename();
responseInfo.setFilename(s);
sb.append(uploadPath).append("/").append(s); sb.append(uploadPath).append("/").append(s);
Path path = Paths.get(sb.toString()); Path path = Paths.get(sb.toString());

Loading…
Cancel
Save