refactor(infra): 文件列表接口接入 @OssPresignUrl 自动预签名

FileRespVO.url 字段添加 @OssPresignUrl 注解,移除 Controller 中
手动调用 presignGetUrl 的逻辑,由框架层 ResponseBodyAdvice 统一处理。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
lzh
2026-03-18 15:06:23 +08:00
parent 807d44e398
commit ff153dd1a9
2 changed files with 40 additions and 50 deletions

View File

@@ -77,12 +77,7 @@ public class FileController {
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('infra:file:query')")
public CommonResult<FileRespVO> getFile(@RequestParam("id") Long id) {
FileRespVO respVO = BeanUtils.toBean(fileService.getFile(id), FileRespVO.class);
// 私有桶:对文件 URL 生成预签名访问地址
if (respVO != null && StrUtil.isNotEmpty(respVO.getUrl())) {
respVO.setUrl(fileService.presignGetUrl(respVO.getUrl(), null));
}
return success(respVO);
return success(BeanUtils.toBean(fileService.getFile(id), FileRespVO.class));
}
@DeleteMapping("/delete")
@@ -136,14 +131,7 @@ public class FileController {
@PreAuthorize("@ss.hasPermission('infra:file:query')")
public CommonResult<PageResult<FileRespVO>> getFilePage(@Valid FilePageReqVO pageVO) {
PageResult<FileDO> pageResult = fileService.getFilePage(pageVO);
PageResult<FileRespVO> voPageResult = BeanUtils.toBean(pageResult, FileRespVO.class);
// 私有桶:对文件 URL 生成预签名访问地址
voPageResult.getList().forEach(vo -> {
if (StrUtil.isNotEmpty(vo.getUrl())) {
vo.setUrl(fileService.presignGetUrl(vo.getUrl(), null));
}
});
return success(voPageResult);
return success(BeanUtils.toBean(pageResult, FileRespVO.class));
}
}

View File

@@ -1,36 +1,38 @@
package com.viewsh.module.infra.controller.admin.file.vo.file;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 文件 Response VO,不返回 content 字段,太大")
@Data
public class FileRespVO {
@Schema(description = "文件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long id;
@Schema(description = "配置编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11")
private Long configId;
@Schema(description = "文件路径", requiredMode = Schema.RequiredMode.REQUIRED, example = "viewsh.jpg")
private String path;
@Schema(description = "原文件名", requiredMode = Schema.RequiredMode.REQUIRED, example = "viewsh.jpg")
private String name;
@Schema(description = "文件 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/viewsh.jpg")
private String url;
@Schema(description = "文件MIME类型", example = "application/octet-stream")
private String type;
@Schema(description = "文件大小", example = "2048", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer size;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
}
package com.viewsh.module.infra.controller.admin.file.vo.file;
import com.viewsh.framework.web.core.presign.annotation.OssPresignUrl;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 文件 Response VO,不返回 content 字段,太大")
@Data
public class FileRespVO {
@Schema(description = "文件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long id;
@Schema(description = "配置编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11")
private Long configId;
@Schema(description = "文件路径", requiredMode = Schema.RequiredMode.REQUIRED, example = "viewsh.jpg")
private String path;
@Schema(description = "原文件名", requiredMode = Schema.RequiredMode.REQUIRED, example = "viewsh.jpg")
private String name;
@Schema(description = "文件 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/viewsh.jpg")
@OssPresignUrl
private String url;
@Schema(description = "文件MIME类型", example = "application/octet-stream")
private String type;
@Schema(description = "文件大小", example = "2048", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer size;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
}