fix: 修改上传文件接口的返回值

master
wangrunpu 1 week ago
parent f9f78fcb1c
commit 731c4425d4

@ -47,10 +47,10 @@ public class FileController {
@Operation(summary = "上传文件", description = "模式一:后端上传文件")
@Parameter(name = "file", description = "文件附件", required = true,
schema = @Schema(type = "string", format = "binary"))
public CommonResult<String> uploadFile(@Valid FileUploadReqVO uploadReqVO) throws Exception {
public CommonResult<FileUploadRespVO> uploadFile(@Valid FileUploadReqVO uploadReqVO) throws Exception {
MultipartFile file = uploadReqVO.getFile();
byte[] content = IoUtil.readBytes(file.getInputStream());
return success(fileService.createFile(content, file.getOriginalFilename(),
return success(fileService.createFileWithInfo(content, file.getOriginalFilename(),
uploadReqVO.getDirectory(), file.getContentType()));
}

@ -0,0 +1,24 @@
package cn.iocoder.yudao.module.infra.controller.admin.file.vo.file;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Schema(description = "管理后台 - 上传文件 Response VO")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FileUploadRespVO {
@Schema(description = "文件ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long id;
@Schema(description = "文件URL", requiredMode = Schema.RequiredMode.REQUIRED,
example = "https://www.iocoder.cn/yudao.jpg")
private String url;
@Schema(description = "文件路径", example = "2024/01/file.jpg")
private String path;
}

@ -1,9 +1,7 @@
package cn.iocoder.yudao.module.infra.service.file;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FileCreateReqVO;
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO;
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePresignedUrlRespVO;
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
import jakarta.validation.constraints.NotEmpty;
@ -36,6 +34,18 @@ public interface FileService {
String createFile(@NotEmpty(message = "文件内容不能为空") byte[] content,
String name, String directory, String type);
/**
* IDURL
*
* @param content
* @param name
* @param directory
* @param type MIME
* @return
*/
FileUploadRespVO createFileWithInfo(@NotEmpty(message = "文件内容不能为空") byte[] content,
String name, String directory, String type);
/**
*
*

@ -11,6 +11,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FileCreateReqVO;
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO;
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePresignedUrlRespVO;
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FileUploadRespVO;
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
import cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper;
import cn.iocoder.yudao.module.infra.framework.file.core.client.FileClient;
@ -91,6 +92,40 @@ public class FileServiceImpl implements FileService {
return url;
}
@Override
@SneakyThrows
public FileUploadRespVO createFileWithInfo(byte[] content, String name, String directory, String type) {
// 1.1 处理 type 为空的情况
if (StrUtil.isEmpty(type)) {
type = FileTypeUtils.getMineType(content, name);
}
// 1.2 处理 name 为空的情况
if (StrUtil.isEmpty(name)) {
name = DigestUtil.sha256Hex(content);
}
if (StrUtil.isEmpty(FileUtil.extName(name))) {
// 如果 name 没有后缀 type则补充后缀
String extension = FileTypeUtils.getExtension(type);
if (StrUtil.isNotEmpty(extension)) {
name = name + extension;
}
}
// 2.1 生成上传的 path需要保证唯一
String path = generateUploadPath(name, directory);
// 2.2 上传到文件存储器
FileClient client = fileConfigService.getMasterFileClient();
Assert.notNull(client, "客户端(master) 不能为空");
String url = client.upload(content, path, type);
// 3. 保存到数据库
FileDO fileDO = new FileDO().setConfigId(client.getId())
.setName(name).setPath(path).setUrl(url)
.setType(type).setSize((long) content.length);
fileMapper.insert(fileDO);
// 4. 返回文件信息(包含ID)
return new FileUploadRespVO(fileDO.getId(), url, path);
}
@VisibleForTesting
String generateUploadPath(String name, String directory) {
// 1. 生成前缀、后缀

@ -22,7 +22,7 @@ public interface DustClearrecordMapper extends BaseMapperX<DustClearrecordDO> {
.eqIfPresent(DustClearrecordDO::getDataId, reqVO.getDataId())
.likeIfPresent(DustClearrecordDO::getClearItemName, reqVO.getClearItemName())
.eqIfPresent(DustClearrecordDO::getTaskProcess, reqVO.getTaskProcess())
.eqIfPresent(DustClearrecordDO::getTaskPerson, reqVO.getTaskPerson())
.likeIfPresent(DustClearrecordDO::getTaskPerson, reqVO.getTaskPerson())
.betweenIfPresent(DustClearrecordDO::getTaskTime, reqVO.getTaskTime())
.betweenIfPresent(DustClearrecordDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(DustClearrecordDO::getPicOssId, reqVO.getPicOssId())

Loading…
Cancel
Save