本地文件上传

java本地文件上传

1、FileController

java 复制代码
/**
 * @author: yc
 * @des:  文件接口
 * @date: 2024/8/4 11:11
 */
@RestController
@RequestMapping("/file")
public class FileController {

    @Resource
    private FileService fileService;

    @PostMapping("/upload")
    public Response<List<Map<String,String>>> upload(@RequestPart("req") FileUploadReq req, @RequestPart("fileList") List<MultipartFile> fileList){
        req.setFileList(fileList);
        return Response.builder(fileService.upload(req));
    }

}

2、FileService

java 复制代码
/**
 * @author: yc
 * @des:  文件上传接口定义
 * @date: 2024/8/3 10:04
 */
public interface FileService {

    /**
     * @author: yc
     * @des:  文件上传到本地
     * @date: 2024/8/3 10:05
     */
    List<Map<String,String>> upload(FileUploadReq req);

}

3、FileServiceImpl

java 复制代码
/**
 * @author: yc
 * @des:  文件存储接口实现
 * @date: 2024/06/07 16:09
 */
@Service
public class ConfigFileStoreServiceImpl implements ConfigFileStoreService {


    /**
     * @author: yc
     * @des:  文件上传
     * @date: 2024/06/07 16:07
     */
    @Override
    public Result<List<FileAttributes>> uploadFiles(ReqBizCondition req) {
        if(Objects.isNull(req)){
            return Result.fail(RespBizCodeEnum.BIZ_10001.getCode(),"请求参数不能为空");
        }
        if(CollectionUtils.isEmpty(req.getFiles())){
            return Result.fail(RespBizCodeEnum.BIZ_10001.getCode(),"文件不能为空");
        }
        if(StringUtils.isBlank(req.getModeType())){
            return Result.fail(RespBizCodeEnum.BIZ_10001.getCode(),"前缀类型不能为空");
        }
        FilePixModeEnum e = EnumUtils.getValueOf(FilePixModeEnum.class, req.getModeType());
        if(Objects.isNull(e)){
            return Result.fail(RespBizCodeEnum.BIZ_10001.getCode(),"前缀类型错误");
        }
        List<FileAttributes> fileAttributesList = new ArrayList<>();
        for(MultipartFile multipartFile : req.getFiles()){
            Map<String, String> map = FileUtils.upload2local(multipartFile, req.getDataType(), req.getDataCode(), e);
            FileAttributes fileAttributes = new FileAttributes();
            fileAttributes.setFileName(map.get("fileName"));
            fileAttributes.setFilePath(map.get("filePath"));
            fileAttributes.setFileCategory(map.get("typeName"));
            fileAttributes.setFileModel(map.get("subName"));
            fileAttributes.setFileSize(Long.valueOf(map.get("fileSize")));
            fileAttributes.setFileStatus(1);
            fileAttributesList.add(fileAttributes);
        }
        return Result.data(fileAttributesList);
    }

}

4、FileUploadReq

java 复制代码
/**
 * @author: yc
 * @des:  文件上传请求
 * @date: 2024/8/3 10:09
 */
@Data
public class FileUploadReq {

    /**
     * 前缀类型 默认不需要
     * TIMESTAMP = '时间戳',UUID = '随机字符串',NONE = '无需前缀'
     */
    private String pix = "NONE";

    /**
     * 文件
     */
    private List<MultipartFile> fileList;

    /**
     * 一级文件夹名称 可选
     */
    private String dirName1;

    /**
     * 二级文件夹名称 可选
     */
    private String dirName2;

    /**
     * 是否需要年/月/日 子文件夹 默认不需要
     */
    private Boolean needYMD = Boolean.FALSE;
    
}

5、FilePixModeEnum

java 复制代码
/**
 * @author: yc
 * @des:  文件前缀模式枚举
 * @date: 2024/06/07 16:24
 */
@Getter
@AllArgsConstructor
public enum FilePixModeEnum implements BaseEnum{

    TIMESTAMP("TIMESTAMP","时间戳"),
    UUID("UUID","随机字符串"),
    NONE("NONE","无需前缀");

    private String code;

    private String name;

}

6、EnumUtils

枚举工具类

7、FileUtils

文件工具类

8、结果截图

8.1 postman
8.2结果
相关推荐
mldong17 分钟前
"applicant" 契约:退回发起人的闭环设计
java·架构
月华路36 分钟前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
gugucoding1 小时前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言
zww89491112 小时前
校园跑腿系统开发实战指南:从需求分析到上线部署全流程解析
java
Fluxart.ai2 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
名字还没想好☜3 小时前
Java 线上内存泄漏排查实战:jmap 导堆、MAT 找 GC Roots 与四类常见泄漏
java·开发语言·jvm·内存泄漏
IT爱学堂4 小时前
尚硅谷 - 2025年3月Java+AI大模型应用开发
java·开发语言·人工智能
小贤plus5 小时前
SpringBoot 三大核心注解精讲:@ControllerAdvice、@RestControllerAdvice、@Validated 分组校验(实战)
java
吠品6 小时前
Java byte数组与String互转:编码细节与踩坑记录
java·linux·服务器
晚风醉蝶6 小时前
1-6-插入排序-InsertionSort
java·数据结构·排序算法