feat(file): 优化文件上传逻辑

- 在上传文件时保留原始文件名
- 优化文件名生成逻辑,使用 UUID 和日期文件夹结构
- 统一处理文件后缀获取方式
-调整文件信息返回结构,返回原始文件名和访问 URL
This commit is contained in:
Theo
2025-03-03 16:36:11 +08:00
parent 422568bc41
commit 5c9523ccbc
3 changed files with 16 additions and 10 deletions

View File

@@ -62,8 +62,10 @@ public class AliyunFileService implements FileService {
@SneakyThrows
public FileInfo uploadFile(MultipartFile file) {
// 获取文件名称
String originalFilename = file.getOriginalFilename();
// 生成文件名(日期文件夹)
String suffix = FileUtil.getSuffix(file.getOriginalFilename());
String suffix = FileUtil.getSuffix(originalFilename);
String uuid = IdUtil.simpleUUID();
String fileName = DateUtil.format(LocalDateTime.now(), "yyyyMMdd") + "/" + uuid + "." + suffix;
// try-with-resource 语法糖自动释放流
@@ -82,7 +84,7 @@ public class AliyunFileService implements FileService {
// 获取文件访问路径
String fileUrl = "https://" + bucketName + "." + endpoint + "/" + fileName;
FileInfo fileInfo = new FileInfo();
fileInfo.setName(fileName);
fileInfo.setName(originalFilename);
fileInfo.setUrl(fileUrl);
return fileInfo;
}

View File

@@ -44,11 +44,14 @@ public class LocalFileService implements FileService {
*/
@Override
public FileInfo uploadFile(MultipartFile file) {
// 获取文件名
String originalFilename = file.getOriginalFilename();
// 获取文件后缀
String suffix = FileUtil.getSuffix(originalFilename);
// 生成uuid
String fileName = IdUtil.simpleUUID()+ "." + suffix;;
// 生成文件名(日期文件夹)
String suffix = FileUtil.getSuffix(file.getOriginalFilename());
String uuid = IdUtil.simpleUUID();
String folder = DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATE_PATTERN);
String fileName = uuid + "." + suffix;
String filePrefix = storagePath.endsWith(File.separator) ? storagePath : storagePath + File.separator;
// try-with-resource 语法糖自动释放流
try (InputStream inputStream = file.getInputStream()) {
@@ -61,7 +64,7 @@ public class LocalFileService implements FileService {
// 获取文件访问路径,因为这里是本地存储,所以直接返回文件的相对路径,需要前端自行处理访问前缀
String fileUrl = File.separator + folder + File.separator + fileName;
FileInfo fileInfo = new FileInfo();
fileInfo.setName(fileName);
fileInfo.setName(originalFilename);
fileInfo.setUrl(fileUrl);
return fileInfo;
}

View File

@@ -7,8 +7,8 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.youlai.boot.common.exception.BusinessException;
import com.youlai.boot.common.result.ResultCode;
import com.youlai.boot.shared.file.service.FileService;
import com.youlai.boot.shared.file.model.FileInfo;
import com.youlai.boot.shared.file.service.FileService;
import io.minio.*;
import io.minio.http.Method;
import jakarta.annotation.PostConstruct;
@@ -21,7 +21,6 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.InputStream;
import java.time.LocalDateTime;
@@ -86,8 +85,10 @@ public class MinioFileService implements FileService {
// 创建存储桶(存储桶不存在)如果有搭建好的minio服务建议放在init方法中
createBucketIfAbsent(bucketName);
// 文件原生名称
String originalFilename = file.getOriginalFilename();
// 文件后缀
String suffix = FileUtil.getSuffix(file.getOriginalFilename());
String suffix = FileUtil.getSuffix(originalFilename);
// 文件夹名称
String dateFolder = DateUtil.format(LocalDateTime.now(), "yyyyMMdd");
// 文件名称
@@ -123,7 +124,7 @@ public class MinioFileService implements FileService {
}
FileInfo fileInfo = new FileInfo();
fileInfo.setName(fileName);
fileInfo.setName(originalFilename);
fileInfo.setUrl(fileUrl);
return fileInfo;
} catch (Exception e) {