引言
在项目中实现本地文件上传功能,可以用于用户上传图片、文档等文件,并将文件保存到服务器的本地目录中。通过简单的配置和代码实现,您可以轻松处理文件上传请求,并管理上传的文件。
添加依赖
在 pom.xml
中添加依赖:
js
<!-- 文件管理模块 -->
<dependency>
<groupId>com.xiaomayi</groupId>
<artifactId>xiaomayi-file</artifactId>
</dependency>
文件上传配置
在 application-{profile}.yml
中配置文件上传的存储路径:
js
# 系统配置
system:
# 软件名称
name: 小蚂蚁云
# 软件版本
version: 1.0.0
# 本地存储路径
profile: E:\XiaoMaYi\XiaoMaYi-Nacos-AntdVue\upload\
# 本地资源访问域名
domain: http://127.0.0.1:8081/api/file
温馨提示
- 参数
profile
: 指定上传附件存储绝对路径。 - 参数
domain
:资源访问域名,配置Nginx
或者Apache
代理服务域名,即浏览器访问附件的域名。
文件上传处理
创建一个控制器类,处理文件上传请求:
js
package com.xiaomayi.admin.controller;
import com.xiaomayi.core.config.AppConfig;
import com.xiaomayi.core.utils.R;
import com.xiaomayi.file.annotation.FileLog;
import com.xiaomayi.file.annotation.FileValidation;
import com.xiaomayi.file.annotation.FilesValidation;
import com.xiaomayi.file.dto.UploadFileDTO;
import com.xiaomayi.file.enums.FileType;
import com.xiaomayi.file.vo.UploadFileVO;
import com.xiaomayi.system.service.UploadService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* <p>
* 文件上传 前端控制器
* </p>
*
* @author 小蚂蚁云团队
* @since 2024-05-21
*/
@RestController
@RequestMapping("/upload")
@Tag(name = "文件上传", description = "文件上传")
@AllArgsConstructor
public class UploadController {
private final UploadService uploadService;
/**
* 上传文件
*
* @param file 文件对象
* @param uploadFileDTO 文件参数
* @return 返回结果
*/
@Operation(summary = "上传文件", description = "上传文件")
@PreAuthorize("@pms.hasAuthority('sys:upload:file')")
@FileLog(title = "上传文件", type = FileType.FILE)
@PostMapping("/uploadFile")
public R<UploadFileVO> uploadFile(@FileValidation MultipartFile file, @Validated UploadFileDTO uploadFileDTO) {
return uploadService.uploadFile(file, uploadFileDTO);
}
/**
* 批量上传文件
*
* @param file 文件对象列表
* @param uploadFileDTO 文件参数
* @return 返回结果
*/
@Operation(summary = "批量上传文件", description = "批量上传文件")
@PreAuthorize("@pms.hasAuthority('sys:upload:files')")
@FileLog(title = "批量上传文件", type = FileType.FILES)
@PostMapping("/uploadFiles")
public R<List<UploadFileVO>> uploadFiles(@FilesValidation MultipartFile[] file, @Validated UploadFileDTO uploadFileDTO) {
return uploadService.uploadFiles(file, uploadFileDTO);
}
}
单个文件上传
使用 ApiFox(官方推荐)
或前端表单测试文件上传功能:
请求方法:POST
请求地址:http://127.0.0.1:8081/api/upload/uploadFile
请求参数:file(文件字段)、其他业务参数
响应结果输出:
js
{
"code": 0,
"msg": "操作成功",
"data": {
"originalName": "41c55d508323bda837368cdb5039478.jpg",
"fileExtension": "jpg",
"fileType": "image/jpeg",
"fileSize": 306995,
"fileName": "1741253199351.jpg",
"filePath": "/user/20250306/1741253199351.jpg",
"fileUrl": "http://127.0.0.1:8081/api/file/user/20250306/1741253199351.jpg"
},
"ok": true
}
批量文件上传
使用 ApiFox(官方推荐)
或前端表单测试文件上传功能:
请求方法:POST
请求地址:http://127.0.0.1:8081/api/upload/uploadFiles
请求参数:file(文件字段)、其他业务参数
响应结果输出:
js
{
"code": 0,
"msg": "操作成功",
"data": [
{
"originalName": "测试.png",
"fileExtension": "png",
"fileType": "image/png",
"fileSize": 94603,
"fileName": "1741691455078.png",
"filePath": "/file/20250311/1741691455078.png",
"fileUrl": "http://127.0.0.1:8081/api/file/file/20250311/1741691455078.png"
},
{
"originalName": "测试.png",
"fileExtension": "png",
"fileType": "image/png",
"fileSize": 94603,
"fileName": "1741691455700.png",
"filePath": "/file/20250311/1741691455700.png",
"fileUrl": "http://127.0.0.1:8081/api/file/file/20250311/1741691455700.png"
}
],
"ok": true
}
总结
通过以上步骤,您可以在项目中实现本地文件上传功能,适用于用户上传图片、文档等场景。通过扩展功能,可以进一步增强文件管理的灵活性和安全性。