文件上传下载修正
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
// 保存到数据库
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user