|
|
@@ -10,6 +10,7 @@ import org.springframework.http.HttpStatus;
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
+import top.imwork.commons.core.enums.HttpStatusCodeEnum;
|
|
|
import top.imwork.commons.core.pojo.ApiResponse;
|
|
|
import top.imwork.commons.core.pojo.FileUploadRequest;
|
|
|
import top.imwork.commons.core.pojo.FileUploadResponse;
|
|
|
@@ -17,6 +18,7 @@ import top.imwork.commons.core.pojo.ResponseMsg;
|
|
|
import top.imwork.window.silos.service.oss.FileUploadServiceImpl;
|
|
|
import top.imwork.window.silos.utils.SecurityUtils;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
@@ -86,79 +88,26 @@ public class FilesUploadController {
|
|
|
* 通用文件上传接口(支持单文件和双文件)
|
|
|
* 使用JSON格式接收参数,文件通过Multipart上传
|
|
|
*/
|
|
|
- @PostMapping("/upload")
|
|
|
- public ResponseEntity<FileUploadResponse> uploadFile(
|
|
|
- @Valid FileUploadRequest request) {
|
|
|
-
|
|
|
- log.info("收到文件上传请求,业务类型:{},用户ID:{}",
|
|
|
- request.getBusinessType(), request.getUserId());
|
|
|
-
|
|
|
- FileUploadResponse response = fileUploadService.upload(request);
|
|
|
-
|
|
|
- HttpStatus status = response.getSuccess() ?
|
|
|
- HttpStatus.OK : HttpStatus.BAD_REQUEST;
|
|
|
-
|
|
|
- return ResponseEntity.status(status).body(response);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 传统表单方式上传(单文件)
|
|
|
- */
|
|
|
- @PostMapping("/upload/single")
|
|
|
- public ResponseEntity<FileUploadResponse> uploadSingleFile(
|
|
|
- @RequestParam("file") @NotNull MultipartFile file,
|
|
|
- @RequestParam(value = "businessType", required = false, defaultValue = "common") String businessType,
|
|
|
- @RequestParam(value = "userId", required = false) Long userId,
|
|
|
- @RequestParam(value = "description", required = false) String description) {
|
|
|
-
|
|
|
- FileUploadResponse response = fileUploadService.uploadSingleFile(
|
|
|
- file, businessType, userId, description);
|
|
|
-
|
|
|
- return getResponseEntity(response);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 传统表单方式上传(多文件)
|
|
|
- */
|
|
|
- @PostMapping("/upload/multiple")
|
|
|
- public ResponseEntity<FileUploadResponse> uploadMultipleFiles(
|
|
|
- @RequestParam("files") @NotNull List<MultipartFile> files,
|
|
|
- @RequestParam(value = "businessType", required = false, defaultValue = "common") String businessType,
|
|
|
- @RequestParam(value = "userId", required = false) Long userId,
|
|
|
- @RequestParam(value = "description", required = false) String description) {
|
|
|
-
|
|
|
- FileUploadResponse response = fileUploadService.uploadMultipleFiles(
|
|
|
- files, businessType, userId, description);
|
|
|
-
|
|
|
- return getResponseEntity(response);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 简化版上传接口(最常用)
|
|
|
- */
|
|
|
- @PostMapping("/upload/simple")
|
|
|
- public ResponseEntity<FileUploadResponse> uploadSimple(
|
|
|
- @RequestParam(value = "file", required = false) MultipartFile file,
|
|
|
- @RequestParam(value = "files", required = false) List<MultipartFile> files,
|
|
|
- @RequestParam(value = "businessType", defaultValue = "common") String businessType) {
|
|
|
-
|
|
|
- FileUploadRequest request = new FileUploadRequest();
|
|
|
- if (file != null && !file.isEmpty()) {
|
|
|
- request.setFile(file);
|
|
|
- }
|
|
|
- if (files != null && !files.isEmpty()) {
|
|
|
- request.setFiles(files);
|
|
|
+ @PostMapping("/file/upload")
|
|
|
+ public ResponseMsg uploadFiles(@Valid FileUploadRequest request){
|
|
|
+ FileUploadResponse uploadResponse = null;
|
|
|
+ if (request.getFile() != null || !request.getFile().isEmpty()) {
|
|
|
+ // 2. 安全检查
|
|
|
+ String securityCheck = SecurityUtils.checkFileSecurity(request.getFile());
|
|
|
+ if (securityCheck != null) {
|
|
|
+ log.warn("文件安全检查失败: {}", securityCheck);
|
|
|
+ return ResponseMsg.buildResponse(HttpStatusCodeEnum.BAD_REQUEST.getCode(), securityCheck);
|
|
|
+ }
|
|
|
+ // 3. 上传文件
|
|
|
+ uploadResponse = fileUploadService.upload(request);
|
|
|
+ log.info("文件上传成功: {}", uploadResponse.getFilePath());
|
|
|
+ return ResponseMsg.buildResponse(uploadResponse);
|
|
|
+ } else if (!request.getFiles().isEmpty()) {
|
|
|
+ uploadResponse = fileUploadService.upload(request);
|
|
|
+ return ResponseMsg.buildResponse(uploadResponse);
|
|
|
+ } else {
|
|
|
+ // 1. 基础校验
|
|
|
+ return ResponseMsg.buildResponse(HttpStatusCodeEnum.BAD_REQUEST.getCode(), "文件不能为空");
|
|
|
}
|
|
|
- request.setBusinessType(businessType);
|
|
|
-
|
|
|
- FileUploadResponse response = fileUploadService.upload(request);
|
|
|
-
|
|
|
- return getResponseEntity(response);
|
|
|
- }
|
|
|
-
|
|
|
- private ResponseEntity<FileUploadResponse> getResponseEntity(FileUploadResponse response) {
|
|
|
- HttpStatus status = response.getSuccess() ?
|
|
|
- HttpStatus.OK : HttpStatus.BAD_REQUEST;
|
|
|
- return ResponseEntity.status(status).body(response);
|
|
|
}
|
|
|
}
|