文件上传下载修正

This commit is contained in:
2025-12-20 15:14:44 +08:00
parent 9b6e959973
commit 81508a1fdc
28 changed files with 1059 additions and 192 deletions

View File

@@ -78,7 +78,7 @@ public class FileController {
@Operation(summary = "获取文件信息")
@GetMapping("/{fileId}")
public ResultDomain<TbSysFileDTO> getFileById(@PathVariable String fileId) {
public ResultDomain<TbSysFileDTO> getFileById(@PathVariable("fileId") String fileId) {
return fileService.getFileById(fileId);
}
@@ -86,7 +86,7 @@ public class FileController {
@Operation(summary = "下载文件")
@GetMapping("/download/{fileId}")
public ResponseEntity<byte[]> downloadFile(@PathVariable String fileId) {
public ResponseEntity<byte[]> downloadFile(@PathVariable("fileId") String fileId) {
ResultDomain<byte[]> result = fileService.downloadFile(fileId);
if (!result.getSuccess() || result.getData() == null) {
return ResponseEntity.notFound().build();
@@ -105,7 +105,7 @@ public class FileController {
@Operation(summary = "删除文件")
@DeleteMapping("/{fileId}")
public ResultDomain<Boolean> deleteFile(@PathVariable String fileId) {
public ResultDomain<Boolean> deleteFile(@PathVariable("fileId") String fileId) {
return fileService.deleteFile(fileId);
}

View File

@@ -25,7 +25,7 @@ public interface FileMapper extends BaseMapper<TbSysFileDTO> {
* @param fileId 文件ID
* @return 文件信息
*/
@Select("SELECT * FROM file.tb_sys_file WHERE file_id = #{fileId} AND deleted = 0")
@Select("SELECT * FROM file.tb_sys_file WHERE file_id = #{fileId} AND deleted = false")
TbSysFileDTO selectByFileId(@Param("fileId") String fileId);
/**
@@ -48,7 +48,7 @@ public interface FileMapper extends BaseMapper<TbSysFileDTO> {
* @param updater 更新者
* @return 影响行数
*/
@Update("UPDATE file.tb_sys_file SET deleted = 1, delete_time = CURRENT_TIMESTAMP, updater = #{updater} WHERE file_id = #{fileId}")
@Update("UPDATE file.tb_sys_file SET deleted = true, delete_time = CURRENT_TIMESTAMP, updater = #{updater} WHERE file_id = #{fileId}")
int deleteByFileId(@Param("fileId") String fileId, @Param("updater") String updater);
/**
@@ -57,7 +57,7 @@ public interface FileMapper extends BaseMapper<TbSysFileDTO> {
* @param businessId 业务ID
* @return 文件列表
*/
@Select("SELECT * FROM file.tb_sys_file WHERE module = #{module} AND business_id = #{businessId} AND deleted = 0 ORDER BY create_time DESC")
@Select("SELECT * FROM file.tb_sys_file WHERE module = #{module} AND business_id = #{businessId} AND deleted = false ORDER BY create_time DESC")
List<TbSysFileDTO> selectByModuleAndBusinessId(@Param("module") String module, @Param("businessId") String businessId);
/**
@@ -65,7 +65,7 @@ public interface FileMapper extends BaseMapper<TbSysFileDTO> {
* @param uploader 上传者用户ID
* @return 文件列表
*/
@Select("SELECT * FROM file.tb_sys_file WHERE uploader = #{uploader} AND deleted = 0 ORDER BY create_time DESC")
@Select("SELECT * FROM file.tb_sys_file WHERE uploader = #{uploader} AND deleted = false ORDER BY create_time DESC")
List<TbSysFileDTO> selectByUploader(@Param("uploader") String uploader);
/**
@@ -73,7 +73,7 @@ public interface FileMapper extends BaseMapper<TbSysFileDTO> {
* @param md5Hash MD5哈希值
* @return 文件信息
*/
@Select("SELECT * FROM file.tb_sys_file WHERE md5_hash = #{md5Hash} AND deleted = 0 LIMIT 1")
@Select("SELECT * FROM file.tb_sys_file WHERE md5_hash = #{md5Hash} AND deleted = false LIMIT 1")
TbSysFileDTO selectByMd5Hash(@Param("md5Hash") String md5Hash);
/**
@@ -82,7 +82,7 @@ public interface FileMapper extends BaseMapper<TbSysFileDTO> {
* @param objectName 对象名称
* @return 文件信息
*/
@Select("SELECT * FROM file.tb_sys_file WHERE bucket_name = #{bucketName} AND object_name = #{objectName} AND deleted = 0")
@Select("SELECT * FROM file.tb_sys_file WHERE bucket_name = #{bucketName} AND object_name = #{objectName} AND deleted = false")
TbSysFileDTO selectByMinioObject(@Param("bucketName") String bucketName, @Param("objectName") String objectName);
/**
@@ -92,6 +92,6 @@ public interface FileMapper extends BaseMapper<TbSysFileDTO> {
* @author yslg
* @since 2025-12-18
*/
@Select("SELECT MAX(version) FROM file.tb_sys_file WHERE file_root_id = #{fileRootId} AND deleted = 0")
@Select("SELECT MAX(version) FROM file.tb_sys_file WHERE file_root_id = #{fileRootId} AND deleted = false")
Integer selectMaxVersionByFileRootId(@Param("fileRootId") String fileRootId);
}

View File

@@ -80,20 +80,19 @@ public class FileServiceImpl implements FileService {
return ResultDomain.failure("文件上传到MinIO失败");
}
// 构建文件访问URL
String fileUrl = minioConfig.buildFileUrl(objectName);
// 保存到数据库
TbSysFileDTO fileDTO = new TbSysFileDTO();
String fileId = UUID.randomUUID().toString();
fileDTO.setOptsn(UUID.randomUUID().toString());
fileDTO.setFileId(UUID.randomUUID().toString());
fileDTO.setFileId(fileId);
fileDTO.setName(originalFilename);
fileDTO.setPath(objectName);
fileDTO.setSize(size);
fileDTO.setType(extension);
fileDTO.setStorageType("MINIO");
fileDTO.setMimeType(contentType);
fileDTO.setUrl(fileUrl);
// URL 设为 NULL前端通过后端接口 /api/file/download/{fileId} 下载
fileDTO.setUrl(null);
fileDTO.setStatus("NORMAL");
fileDTO.setModule(module);
fileDTO.setBusinessId(businessId);
@@ -407,24 +406,26 @@ public class FileServiceImpl implements FileService {
return ResultDomain.failure("文件上传到MinIO失败");
}
// 生成文件URL
String fileUrl = minioConfig.getEndpoint() + "/" + bucketName + "/" + objectName;
// 创建文件DTO
TbSysFileDTO fileDTO = new TbSysFileDTO();
String fileId = UUID.randomUUID().toString().replace("-", "");
fileDTO.setOptsn(UUID.randomUUID().toString());
fileDTO.setFileId(UUID.randomUUID().toString().replace("-", ""));
fileDTO.setFileId(fileId);
fileDTO.setName(fileName);
fileDTO.setPath(objectName);
fileDTO.setUrl(fileUrl);
// URL 设为 NULL前端通过后端接口 /api/file/download/{fileId} 下载
fileDTO.setUrl(null);
fileDTO.setSize(size);
fileDTO.setMimeType(contentType);
fileDTO.setExtension(extension);
fileDTO.setMd5Hash(md5Hash);
fileDTO.setModule(module);
fileDTO.setBusinessId(businessId);
fileDTO.setStorageType("MINIO");
fileDTO.setObjectName(objectName);
fileDTO.setBucketName(bucketName);
fileDTO.setVersion(1);
fileDTO.setFileRootId(fileDTO.getFileId());
fileDTO.setFileRootId(fileId);
fileDTO.setCreateTime(new java.util.Date());
// 保存到数据库

View File

@@ -5,18 +5,19 @@ server:
# context-path: /urban-lifeline/file # 微服务架构下context-path由Gateway管理
# ================== Auth ====================
urban-lifeline:
auth:
enabled: true
whitelist:
- /swagger-ui/**
- /swagger-ui.html
- /v3/api-docs/**
- /webjars/**
- /favicon.ico
- /error
- /actuator/health
- /actuator/info
auth:
enabled: true
gateway-mode: true
whitelist:
- /swagger-ui/**
- /swagger-ui.html
- /v3/api-docs/**
- /webjars/**
- /favicon.ico
- /error
- /actuator/health
- /actuator/info
- /file/download/**
security:
aes: