Compare commits

...

2 Commits

Author SHA1 Message Date
zkh
1fe871faa8 feat(file): 优化文件上传下载接口
- 添加 MediaType 导入以支持 multipart 表单数据
- 修改上传接口 consumes 属性为 MULTIPART_FORM_DATA_VALUE
- 使用 @RequestPart 注解明确指定文件参数
- 将下载接口路径参数改为查询参数 path
- 统一代码缩进风格为四个空格
2025-12-07 21:44:30 +08:00
zkh
1f3fea8277 feat(file): 添加文件上传接口参数名称
- 为 FileController 的 upload 方法 MultipartFile 参数添加 name 属性
- 在 zkh-common 模块中引入 jakarta.validation-api 和 jakarta.annotation-api 依赖
- 将 springdoc-openapi-common 依赖升级为 springdoc-openapi-starter-webmvc-ui 并指定版本
- 为多个模块的 maven-compiler-plugin 配置添加 -parameters 编译参数
- 移除 zkh-file 和 zkh-web 模块中重复或不必要的 springdoc-openapi 依赖声明
2025-12-07 18:19:29 +08:00
6 changed files with 81 additions and 54 deletions

View File

@ -14,6 +14,14 @@
<description>Common utilities and base classes for ZKH framework</description>
<dependencies>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
@ -32,12 +40,23 @@
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-common</artifactId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.14</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.14.1</version>
<configuration>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>

View File

@ -46,6 +46,9 @@
<version>1.18.42</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>

View File

@ -39,12 +39,6 @@
<artifactId>hutool-all</artifactId>
<version>5.8.41</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.14</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
@ -60,6 +54,9 @@
<artifactId>spring-boot-configuration-processor</artifactId>
</path>
</annotationProcessorPaths>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>

View File

@ -9,6 +9,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -25,49 +26,49 @@ import java.nio.file.Paths;
@RestController("_fileController")
@RequestMapping("/file")
public class FileController {
private final static Logger log = LoggerFactory.getLogger(FileController.class);
private final IFileUploadService fileUploadService;
private final IFileDownloadService fileDownloadService;
private final static Logger log = LoggerFactory.getLogger(FileController.class);
private final IFileUploadService fileUploadService;
private final IFileDownloadService fileDownloadService;
public FileController(IFileUploadService fileUploadService, IFileDownloadService fileDownloadService) {
this.fileUploadService = fileUploadService;
this.fileDownloadService = fileDownloadService;
}
public FileController(IFileUploadService fileUploadService, IFileDownloadService fileDownloadService) {
this.fileUploadService = fileUploadService;
this.fileDownloadService = fileDownloadService;
}
@Operation(summary = "上传文件", description = "上传文件到服务器")
@ApiResponse(responseCode = "200", description = "上传成功",
content = @Content(mediaType = "application/json",
schema = @Schema(implementation = R.class)))
@PostMapping
public R<FileInfo> upload(
@Parameter(description = "要上传的文件", required = true)
MultipartFile file) {
try {
FileInfo upload = fileUploadService.upload(file);
return R.success(upload);
} catch (IOException e) {
log.error("上传失败", e);
return R.serverError("上传失败");
}
}
@Operation(summary = "上传文件", description = "上传文件到服务器")
@ApiResponse(responseCode = "200", description = "上传成功",
content = @Content(mediaType = "application/json",
schema = @Schema(implementation = R.class)))
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<FileInfo> upload(
@Parameter(description = "要上传的文件", required = true, name = "file")
@RequestPart("file") MultipartFile file) {
try {
FileInfo upload = fileUploadService.upload(file);
return R.success(upload);
} catch (IOException e) {
log.error("上传失败", e);
return R.serverError("上传失败");
}
}
@Operation(summary = "下载文件", description = "根据文件路径下载文件")
@ApiResponse(responseCode = "200", description = "下载成功")
@ApiResponse(responseCode = "404", description = "文件未找到")
@GetMapping("{path}")
public ResponseEntity<Resource> download(
@Parameter(description = "文件路径", required = true)
@PathVariable String path) {
Path normalize = Paths.get(path).normalize();
try {
Resource download = fileDownloadService.download(normalize.toString());
return ResponseEntity.ok()
.header("Content-Disposition", "attachment; filename=\"" + download.getFilename() + "\"")
.body(download);
} catch (IOException e) {
log.error("下载失败", e);
return ResponseEntity.notFound().build();
}
}
@Operation(summary = "下载文件", description = "根据文件路径下载文件")
@ApiResponse(responseCode = "200", description = "下载成功")
@ApiResponse(responseCode = "404", description = "文件未找到")
@GetMapping
public ResponseEntity<Resource> download(
@Parameter(description = "文件路径", required = true)
@RequestParam("path") String path) {
Path normalize = Paths.get(path).normalize();
try {
Resource download = fileDownloadService.download(normalize.toString());
return ResponseEntity.ok()
.header("Content-Disposition", "attachment; filename=\"" + download.getFilename() + "\"")
.body(download);
} catch (IOException e) {
log.error("下载失败", e);
return ResponseEntity.notFound().build();
}
}
}

View File

@ -26,6 +26,16 @@
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.14.1</version>
<configuration>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>

View File

@ -43,12 +43,6 @@
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.14</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
@ -64,6 +58,9 @@
<artifactId>spring-boot-configuration-processor</artifactId>
</path>
</annotationProcessorPaths>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>