SpringBoot实现文件上传服务器全过程

 更新时间:2025年12月01日 09:46:35   作者:MrDJun  
该文章详细描述了如何纯手工实现一个SpringBoot文件上传功能,包括引入必要的依赖、创建实体类、编写服务层代码、实现文件上传逻辑以及使用Controller进行测试,通过自定义文件路径和将文件名修改为UUID,有效避免了文件名重复的问题

无需任何工具类,纯手工实现SpringBoot上传服务器。上传文件之后自定义路径并把修改文件名为 UUID ,避免文件名重复。

下面我详细的把代码给出,照着我的详细流程,定能解决你的问题。

1、引入swagger 和 lombok

<!-- swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
        </dependency>

2、创建上传信息的实体类

@ApiModel(description = "处理后上传文件的信息")
@Data
@NoArgsConstructor
public class UploadInfo implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "上传结果")
    private String result;

    @ApiModelProperty(value = "初始文件名")
    private String beginFileName;

    @ApiModelProperty(value = "最终上传文件名")
    private String lastFileName;

    @ApiModelProperty(value = "文件类型")
    private String FileType;

    @ApiModelProperty(value = "文件大小")
    private String fileSize;

    @ApiModelProperty(value = "文件上传的地址")
    private String uploadUrl;

}

3、在service层新建 UploadService

/**
     * 上传文件接口
     *
     * @param file  上传的文件
     * @param uploadFilePath 上传到服务器的路径
     * @return 上传并处理后的信息
     * @throws Exception 上传异常
     */
    UploadInfo upload(MultipartFile file, String uploadFilePath) throws Exception;

4、新建一个UploadServiceImpl

这是上面哪个Service的实现类。

@Service
public class UploadServiceImpl implements UploadService {

    @Override
    public UploadInfo upload(MultipartFile file, String uploadFilePath) throws Exception {
        if (file.isEmpty())
            return null;
        UploadInfo uploadInfo = new UploadInfo();
        String originalFilename;
        String fileName;
        originalFilename = file.getOriginalFilename();
        fileName = UUID.randomUUID().toString() + file.getOriginalFilename();
        String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
        long fileSize = file.getSize();
        File packageFile = new File(uploadFilePath);
        if (!packageFile.exists()) {
            packageFile.mkdir();
        }
        File targetFile = new File(uploadFilePath + "/" + fileName);
        file.transferTo(targetFile);
        uploadInfo.setBeginFileName(originalFilename);
        uploadInfo.setLastFileName(fileName);
        uploadInfo.setFileType(fileType);
        uploadInfo.setFileSize(Long.toString(fileSize));
        uploadInfo.setUploadUrl(targetFile.toString());
        uploadInfo.setResult("上传成功");
        return uploadInfo;
    }
}

5、新建Controller测试

    @Autowired
    private UploadService uploadService;
    private final static String UPLOAD_PATH = "C:/file";
    
    @ApiOperation(value = "上传文件测试",notes = "请记得上传时加上参数 file !")
    @PostMapping(value = "/uc/uploadFile",consumes= MediaType.MULTIPART_FORM_DATA_VALUE)
    public UploadInfo uploadTest(@RequestParam("file") MultipartFile file){
        UploadInfo uploadInfo = null;
        try{
            uploadInfo = uploadService.upload(file,UPLOAD_PATH);
        }catch (Exception e){
            System.out.println(e.toString());
        }
        return uploadInfo;
    }

PostMan测试结果:

总结

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

相关文章

  • 解读Java和JavaScript区别与联系

    解读Java和JavaScript区别与联系

    这篇文章主要介绍了解读Java和JavaScript区别与联系,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • java常见log日志的使用方法解析

    java常见log日志的使用方法解析

    本文主要介绍了java常见log日志的使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java解压缩zip - 解压缩多个文件或文件夹实例

    Java解压缩zip - 解压缩多个文件或文件夹实例

    本篇文章主要介绍了Java解压缩zip - 解压缩多个文件或文件夹实例,非常具有实用价值,有需要的可以了解一下。
    2016-12-12
  • Spring Boot应用打WAR包后无法注册到Nacos的问题及解决方法

    Spring Boot应用打WAR包后无法注册到Nacos的问题及解决方法

    当我们将 Spring Boot 应用打包成 WAR 并部署到外部 Tomcat 服务器时,可能会遇到服务无法注册到 Nacos 的情况,其原因主要是应用获取不到正确的服务器端口,下面给大家介绍Spring Boot 应用打 WAR 包后无法注册到 Nacos的问题及解决方法,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • JavaWeb应用实例:用servlet实现oracle 基本增删改查

    JavaWeb应用实例:用servlet实现oracle 基本增删改查

    本篇文章主要介绍了JavaWeb应用实例:用servlet实现oracle 基本增删改查,非常具有实用价值,需要的朋友可以参考下。
    2017-01-01
  • 解读RedisTemplate的各种操作(set、hash、list、string)

    解读RedisTemplate的各种操作(set、hash、list、string)

    这篇文章主要介绍了解读RedisTemplate的各种操作(set、hash、list、string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • java String类型对象转换为自定义类型对象的实现

    java String类型对象转换为自定义类型对象的实现

    本文主要介绍了java String类型对象转换为自定义类型对象的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Java高版本Api在Android中的使用方法详解

    Java高版本Api在Android中的使用方法详解

    API(Application Programming Interface)应用程序编程接口,java API是一本程序员字典,是JDK提供给我们使用的类的说明文档,下面这篇文章主要给大家介绍了关于Java高版本Api在Android中的使用方法,需要的朋友可以参考下
    2022-05-05
  • eclipse中自动生成javadoc文档的方法

    eclipse中自动生成javadoc文档的方法

    这篇文章主要介绍了eclipse中自动生成javadoc文档的方法,是实用eclipse开发Java程序时非常实用的技巧,对于进行Java项目开发具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • Spring Boot 2.X快速整合jpa过程解析

    Spring Boot 2.X快速整合jpa过程解析

    这篇文章主要介绍了Spring Boot 2.X 如何快速整合jpa?,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08

最新评论