farm模块-批量上传
This commit is contained in:
@@ -50,6 +50,12 @@ public class FileController {
|
||||
uploadReqVO.getDirectory(), file.getContentType()));
|
||||
}
|
||||
|
||||
@PostMapping("/upload-multi")
|
||||
@Operation(summary = "多文件上传", description = "批量上传多个文件")
|
||||
public CommonResult<FileMultiUploadRespVO> uploadMultiFiles(@Valid FileMultiUploadReqVO uploadReqVO) throws Exception {
|
||||
return success(fileService.createFiles(uploadReqVO.getFiles(), uploadReqVO.getDirectory()));
|
||||
}
|
||||
|
||||
@GetMapping("/presigned-url")
|
||||
@Operation(summary = "获取文件预签名地址", description = "模式二:前端上传文件:用于前端直接上传七牛、阿里云 OSS 等文件存储器")
|
||||
@Parameters({
|
||||
|
||||
@@ -4,8 +4,10 @@ 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.FileMultiUploadRespVO;
|
||||
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -36,6 +38,15 @@ public interface FileService {
|
||||
String createFile(@NotEmpty(message = "文件内容不能为空") byte[] content,
|
||||
String name, String directory, String type);
|
||||
|
||||
/**
|
||||
* 批量上传文件
|
||||
*
|
||||
* @param files 文件列表
|
||||
* @param directory 目录,允许空
|
||||
* @return 多文件上传结果
|
||||
*/
|
||||
FileMultiUploadRespVO createFiles(List<MultipartFile> files, String directory);
|
||||
|
||||
/**
|
||||
* 生成文件预签名地址信息
|
||||
*
|
||||
|
||||
@@ -2,14 +2,19 @@ package cn.iocoder.yudao.module.infra.service.file;
|
||||
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.crypto.digest.DigestUtil;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
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.FileMultiUploadRespVO;
|
||||
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;
|
||||
@@ -92,6 +97,46 @@ public class FileServiceImpl implements FileService {
|
||||
return url;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public FileMultiUploadRespVO createFiles(List<MultipartFile> files, String directory) {
|
||||
FileMultiUploadRespVO result = new FileMultiUploadRespVO();
|
||||
List<FileMultiUploadRespVO.FileUploadResult> successFiles = new ArrayList<>();
|
||||
List<FileMultiUploadRespVO.FileUploadResult> failedFiles = new ArrayList<>();
|
||||
|
||||
for (MultipartFile file : files) {
|
||||
FileMultiUploadRespVO.FileUploadResult fileResult = new FileMultiUploadRespVO.FileUploadResult();
|
||||
fileResult.setOriginalName(file.getOriginalFilename());
|
||||
fileResult.setSize(file.getSize());
|
||||
fileResult.setType(file.getContentType());
|
||||
|
||||
try {
|
||||
// 上传文件
|
||||
byte[] content = IoUtil.readBytes(file.getInputStream());
|
||||
String url = createFile(content, file.getOriginalFilename(), directory, file.getContentType());
|
||||
|
||||
// 设置成功结果
|
||||
fileResult.setUrl(url);
|
||||
fileResult.setSuccess(true);
|
||||
successFiles.add(fileResult);
|
||||
} catch (Exception e) {
|
||||
// 设置失败结果
|
||||
fileResult.setSuccess(false);
|
||||
fileResult.setErrorMessage(e.getMessage());
|
||||
failedFiles.add(fileResult);
|
||||
}
|
||||
}
|
||||
|
||||
// 设置统计信息
|
||||
result.setSuccessFiles(successFiles);
|
||||
result.setFailedFiles(failedFiles);
|
||||
result.setTotalCount(files.size());
|
||||
result.setSuccessCount(successFiles.size());
|
||||
result.setFailedCount(failedFiles.size());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
String generateUploadPath(String name, String directory) {
|
||||
// 1. 生成前缀、后缀
|
||||
|
||||
Reference in New Issue
Block a user