Java实现文件上传到本地方式(自定义保存路径)

 更新时间:2026年06月15日 09:28:31   作者:psvm_code  
基于SpringBoot实现文件上传与存储功能,支持PDF和DOCX文件类型判断与保存,并提供文件存储路径及处理异常

首先基于 springboot 实现的,其他场景下可以引入相应的 jar 包后进行整合。

首先写入一个方法

方法的参数为传入的文件,方法的返回值自定义,这里返回类型为 String ,返回文件的存储地址。

public String uploadToLocal(MultipartFile file){
}

接着在方法中进行文件的具体存取操作。

先获取上传文件的原始名称

String originName = file.getOriginalFilename();

接着可以指定只能上传 pdf,doc,docx 类型的文件,这里需要先找出文件的后缀来判断上传文件的类型是否合法:

先将指定的后缀存在 set 集合中

set 集合的底层是哈希表,时间复杂度为 O(1)

        Set<String> set = new HashSet<>();
        set.add(".pdf");
        set.add(".doc");
        set.add(".docx");
        set.add(".jpg");

接着找出文件的后缀,首先遍历获取的原始文件名,通过下标遍历这个原始名称,找到第一个"."后结束遍历,然后调用 String.subString(int index) 得到字符串从 index (包括)一直到后面所有的字符串,得到的字符串就是文件的后缀。

        int count = 0;
        for(int i = 0; i < originName.length(); i++){
            if(originName.charAt(i) == '.'){
                count = i;
                break;
            }
        }
        String endName = originName.substring(count);

同时也可以获取到文件类型

比如 ".pdf" 将"."去掉得到类型 pdf

String fileType = originName.substring(count + 1);

再判断文件是否是合法类型

不合法则直接返回错误信息:

        if(!set.contains(endName)){
            return new String("上传的文件类型错误,只能上传pdf,doc,docx,jpg类型的文件");
        }

如果文件类型合法,进行接下来的操作。

首先确定文件的保存路径,可以自定义。

这里直接保存在项目父目录下,加入项目叫 test,路径为

test/files/文件类型/保存文件时候的时间(yyyyMMdd)年月日/文件原始名称

这就需要获取当天的日期并格式化为yyyyMMdd格式,并获取文件类型。

路径采用拼接的方式

先获取当前项目的路径然后一步步拼接:

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String format = sdf.format(new Date());
        String savePath = System.getProperty("user.dir") + "\\" + "files" +   "\\" + fileType + "\\" + format;

最后进行文件的保存

文件保存过程中可能会出现异常,因此用try...catch

        try {
            file.transferTo(new File(folder,saveName));
            String filePath = savePath + "\\" + saveName;
            return new String("文件路径为:" + filePath);
        } catch (IOException e){
            return new String(e.getMessage());
        }

最后返回的String为文件的存储地址,即保存路径 + 文件名。

接下来是方法的完整代码

    public String uploadToLocal(MultipartFile file){
        // 获取文件原本的名字
        String originName = file.getOriginalFilename();
        // 判断文件是否是pdf文件
        Set<String> set = new HashSet<>();
        set.add(".pdf");
        set.add(".doc");
        set.add(".docx");
        // 取出文件的后缀
        int count = 0;
        for(int i = 0; i < originName.length(); i++){
            if(originName.charAt(i) == '.'){
                count = i;
                break;
            }
        }
        String endName = originName.substring(count); //取出文件类型
        String fileType = originName.substring(count + 1); //文件类型
        if(!set.contains(endName)){
            return new String("上传的文件类型错误,只能上传pdf,doc,docx类型的文件");
        }
        // 创建保存路径
        //日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String format = sdf.format(new Date());
        String savePath = System.getProperty("user.dir") + "\\" + "files" +   "\\" + fileType + "\\" + format;
        // 保存文件的文件夹
        File folder = new File(savePath);
        // 判断路径是否存在,不存在则自动创建
        if(!folder.exists()){
            folder.mkdirs();
        }
        String saveName = originName;
        try {
            file.transferTo(new File(folder,saveName));
            String filePath = savePath + "\\" + saveName;
            return new String("文件路径为:" + filePath);
        } catch (IOException e){
            return new String(e.getMessage());
        }
    }

方法可用作工具类,也可以直接用作后端接口。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • JAVA使用POI获取Excel的列数与行数

    JAVA使用POI获取Excel的列数与行数

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 下面这篇文章给大家介绍了JAVA使用POI获取Excel列数和行数的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • mybatis时间范围查询代码示例

    mybatis时间范围查询代码示例

    这篇文章主要给大家介绍了关于mybatis时间范围查询的相关资料,在项⽬中避免不了要⽤到时间范围查询,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • Spring Security 最佳实践:2026 实战指南

    Spring Security 最佳实践:2026 实战指南

    这段文章详细介绍了SpringSecurity的核心概念、配置方法、安全最佳实践及常见安全漏洞的解决方案,特别强调了通过合理配置SpringSecurity可以有效提升应用的安全性,感兴趣的朋友跟随小编一起看看吧
    2026-06-06
  • Java为实体类动态添加属性的方法详解

    Java为实体类动态添加属性的方法详解

    这篇文章主要介绍了Java如何给已有实体类动态的添加字段并返回新的实体对象且不影响原来的实体对象结构。文中的方法讲解详细,需要的可以参考一下
    2022-06-06
  • java项目依赖包选择具体实现类示例介绍

    java项目依赖包选择具体实现类示例介绍

    这篇文章主要为大家介绍了java项目依赖包选择具体实现类示例介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 多层嵌套的json的值如何解析/替换

    多层嵌套的json的值如何解析/替换

    这篇文章主要介绍了多层嵌套的json的值如何解析/替换的方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • SpringBoot入门原理及优势分析

    SpringBoot入门原理及优势分析

    本篇文章主要来为大家介绍SpringBoot入门原理及优势分析,有需要的朋友可以借鉴参考下,希望可以有所帮助,祝大家多多进步,早日升职加薪
    2021-09-09
  • 使用spring动态获取接口的不同实现类

    使用spring动态获取接口的不同实现类

    这篇文章主要介绍了使用spring动态获取接口的不同实现类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 使用maven自定义插件开发

    使用maven自定义插件开发

    这篇文章主要介绍了使用maven自定义插件开发,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • java对url进行编码和解码实现方式

    java对url进行编码和解码实现方式

    文章详细介绍了如何使用Java对URL进行编码和解码,包括相关技术、实现思路、代码示例和项目总结,通过本文,开发者可以掌握如何使用URLEncoder和URLDecoder进行URL编码解码,并理解字符集的重要性与异常处理的基本方法
    2025-11-11

最新评论