Skip to content

引言

在项目中实现本地文件上传功能,可以用于用户上传图片、文档等文件,并将文件保存到服务器的本地目录中。通过简单的配置和代码实现,您可以轻松处理文件上传请求,并管理上传的文件。

添加依赖

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

温馨提示

  1. 参数 profile: 指定上传附件存储绝对路径。
  2. 参数 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
}

总结

通过以上步骤,您可以在项目中实现本地文件上传功能,适用于用户上传图片、文档等场景。通过扩展功能,可以进一步增强文件管理的灵活性和安全性。

小蚂蚁云团队 · 提供技术支持

小蚂蚁云 新品首发
新品首发,限时特惠,抢购从速! 全场95折
赋能开发者,助理企业发展,提供全方位数据中台解决方案。
获取官方授权