Commit 0998a6ac by jianan

body入参文件批量上传

parent 075424cc
......@@ -4,6 +4,7 @@ import com.yd.common.result.Result;
import com.yd.oss.api.service.ApiOssService;
import com.yd.oss.feign.client.ApiOssFeignClient;
import com.yd.oss.feign.request.ApiUploadFileRequest;
import com.yd.oss.feign.response.ApiBatchUploadResponse;
import com.yd.oss.feign.response.ApiFileMetadataResponse;
import com.yd.oss.feign.response.ApiUploadResponse;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -12,6 +13,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* OSS接口信息
*
......@@ -108,4 +111,15 @@ public class ApiOssController implements ApiOssFeignClient {
public Result<ApiFileMetadataResponse> getFileMetadata(String fileKey) {
return apiOssService.getFileMetadata(fileKey,"","");
}
/**
* 批量上传文件 - body入参方式
* @param files 上传的文件列表
* @param request 批量上传请求参数
* @return 批量上传响应
*/
@Override
public Result<ApiBatchUploadResponse> batchUploadFiles(List<MultipartFile> files, ApiUploadFileRequest request) {
return apiOssService.batchUploadFiles(files, request);
}
}
......@@ -2,11 +2,13 @@ package com.yd.oss.api.service;
import com.yd.common.result.Result;
import com.yd.oss.feign.request.ApiUploadFileRequest;
import com.yd.oss.feign.response.ApiBatchUploadResponse;
import com.yd.oss.feign.response.ApiFileMetadataResponse;
import com.yd.oss.feign.response.ApiUploadResponse;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface ApiOssService {
Result<ApiUploadResponse> uploadFile(MultipartFile file, String bucket, String provider, String uploadUser);
......@@ -25,4 +27,12 @@ public interface ApiOssService {
Result<ApiFileMetadataResponse> getFileMetadata(String fileKey, String bucket, String provider);
/**
* 批量上传文件
* @param files 文件列表
* @param request 批量上传请求参数
* @return 批量上传响应
*/
Result<ApiBatchUploadResponse> batchUploadFiles(List<MultipartFile> files, ApiUploadFileRequest request);
}
......@@ -4,6 +4,7 @@ import com.alibaba.cloud.commons.lang.StringUtils;
import com.yd.common.result.Result;
import com.yd.oss.api.service.ApiOssService;
import com.yd.oss.feign.request.ApiUploadFileRequest;
import com.yd.oss.feign.response.ApiBatchUploadResponse;
import com.yd.oss.feign.response.ApiFileMetadataResponse;
import com.yd.oss.feign.response.ApiUploadResponse;
import com.yd.oss.service.dto.FileMetadata;
......@@ -22,6 +23,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.time.Duration;
import java.util.List;
import java.util.Objects;
@Slf4j
......@@ -236,4 +238,27 @@ public class ApiOssServiceImpl implements ApiOssService {
}
}
/**
* 批量上传文件
* @param files 文件列表
* @param request 批量上传请求参数
* @return 批量上传响应
*/
@Override
public Result<ApiBatchUploadResponse> batchUploadFiles(List<MultipartFile> files, ApiUploadFileRequest request) {
try {
// 转换请求参数
OssUploadFileReqDto reqDto = new OssUploadFileReqDto();
BeanUtils.copyProperties(request, reqDto);
// 调用服务层批量上传方法
ApiBatchUploadResponse response = ossService.batchUploadFiles(files, reqDto);
return Result.success(response);
} catch (Exception e) {
log.error("批量上传文件失败", e);
return Result.fail("批量上传文件失败: " + e.getMessage());
}
}
}
......@@ -3,6 +3,7 @@ package com.yd.oss.feign.client;
import com.yd.common.result.Result;
import com.yd.oss.feign.fallback.ApiOssFeignFallbackFactory;
import com.yd.oss.feign.request.ApiUploadFileRequest;
import com.yd.oss.feign.response.ApiBatchUploadResponse;
import com.yd.oss.feign.response.ApiFileMetadataResponse;
import com.yd.oss.feign.response.ApiUploadResponse;
import org.springframework.cloud.openfeign.FeignClient;
......@@ -10,6 +11,8 @@ import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* OSS服务信息Feign客户端
*/
......@@ -83,4 +86,15 @@ public interface ApiOssFeignClient {
@GetMapping("/metadata")
Result<ApiFileMetadataResponse> getFileMetadata(@RequestParam("fileKey") String fileKey);
/**
* 批量上传文件 - body入参方式
* @param files 上传的文件列表
* @param request 批量上传请求参数
* @return 批量上传响应
*/
@PostMapping(value = "/batch/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Result<ApiBatchUploadResponse> batchUploadFiles(
@RequestPart("files") List<MultipartFile> files,
ApiUploadFileRequest request);
}
......@@ -3,6 +3,7 @@ package com.yd.oss.feign.fallback;
import com.yd.common.result.Result;
import com.yd.oss.feign.client.ApiOssFeignClient;
import com.yd.oss.feign.request.ApiUploadFileRequest;
import com.yd.oss.feign.response.ApiBatchUploadResponse;
import com.yd.oss.feign.response.ApiFileMetadataResponse;
import com.yd.oss.feign.response.ApiUploadResponse;
import lombok.extern.slf4j.Slf4j;
......@@ -10,6 +11,8 @@ import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* OSS服务信息Feign降级处理
*/
......@@ -58,6 +61,11 @@ public class ApiOssFeignFallbackFactory implements FallbackFactory<ApiOssFeignCl
public Result<ApiFileMetadataResponse> getFileMetadata(String fileKey) {
return null;
}
@Override
public Result<ApiBatchUploadResponse> batchUploadFiles(List<MultipartFile> files, ApiUploadFileRequest request) {
return null;
}
};
}
}
package com.yd.oss.feign.response;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 批量文件上传响应
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ApiBatchUploadResponse {
/**
* 成功上传的文件列表
*/
private List<ApiUploadResponse> successFiles;
/**
* 失败的文件列表
*/
private List<FailedFile> failedFiles;
/**
* 成功数量
*/
private Integer successCount;
/**
* 失败数量
*/
private Integer failedCount;
/**
* 失败的文件信息
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class FailedFile {
/**
* 原始文件名
*/
private String fileName;
/**
* 失败原因
*/
private String reason;
}
}
......@@ -74,5 +74,10 @@ public interface OssService {
String upload(byte[] content, String fileName);
String upload(InputStream inputStream, String fileName);
// 批量上传文件
com.yd.oss.feign.response.ApiBatchUploadResponse batchUploadFiles(
java.util.List<org.springframework.web.multipart.MultipartFile> files,
com.yd.oss.service.dto.OssUploadFileReqDto reqDto);
}
......@@ -777,4 +777,60 @@ public class AliYunOssServiceImpl implements OssService {
}
}
/**
* 批量上传文件
* @param files 文件列表
* @param reqDto 上传请求参数
* @return 批量上传响应
*/
@Override
public com.yd.oss.feign.response.ApiBatchUploadResponse batchUploadFiles(
java.util.List<MultipartFile> files, OssUploadFileReqDto reqDto) {
com.yd.oss.feign.response.ApiBatchUploadResponse response = new com.yd.oss.feign.response.ApiBatchUploadResponse();
java.util.List<com.yd.oss.feign.response.ApiUploadResponse> successFiles = new java.util.ArrayList<>();
java.util.List<com.yd.oss.feign.response.ApiBatchUploadResponse.FailedFile> failedFiles = new java.util.ArrayList<>();
if (files == null || files.isEmpty()) {
response.setSuccessFiles(successFiles);
response.setFailedFiles(failedFiles);
response.setSuccessCount(0);
response.setFailedCount(0);
return response;
}
for (MultipartFile file : files) {
try {
// 调用单文件上传方法
OssUploadFileResDto uploadResult = uploadFileBody(file, reqDto);
// 转换为ApiUploadResponse
com.yd.oss.feign.response.ApiUploadResponse uploadResponse = new com.yd.oss.feign.response.ApiUploadResponse();
uploadResponse.setFileBizId(uploadResult.getFileBizId());
uploadResponse.setFileKey(uploadResult.getFileKey());
uploadResponse.setOriginalName(uploadResult.getOriginalName());
uploadResponse.setUrl(uploadResult.getUrl());
uploadResponse.setFileSize(uploadResult.getFileSize());
uploadResponse.setFileType(uploadResult.getFileType());
successFiles.add(uploadResponse);
} catch (Exception e) {
log.error("批量上传文件失败: {}", file.getOriginalFilename(), e);
com.yd.oss.feign.response.ApiBatchUploadResponse.FailedFile failedFile =
new com.yd.oss.feign.response.ApiBatchUploadResponse.FailedFile();
failedFile.setFileName(file.getOriginalFilename());
failedFile.setReason(e.getMessage());
failedFiles.add(failedFile);
}
}
response.setSuccessFiles(successFiles);
response.setFailedFiles(failedFiles);
response.setSuccessCount(successFiles.size());
response.setFailedCount(failedFiles.size());
log.info("批量上传完成: 成功{}个, 失败{}个", successFiles.size(), failedFiles.size());
return response;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment