SpringBoot设置全局上传文件路径并上传文件

Posted 小花皮猪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot设置全局上传文件路径并上传文件相关的知识,希望对你有一定的参考价值。

前言

在后端处理文件上传的时候,我们通上传文件的时候,一般这个路径不会随便写。

比如这篇文章中的路径:解决SpringBoot文件上传报错:org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException

我当时就想着随便写一个路径进行测试,所以临时定义了一个路径,其实这样的是不对的。

正确的做法是是将路径配置成一个统一的地址,我们通过获取配置项得到地址,然后进行逻辑操作。

配置全局上传路径

配置全局上传路径,其实很简单,需要借助一个配置项:

我没有云服务器,这里以自己的电脑的某个文件夹为例

# 文件上传路径
file.uploadFolder=D:/upload/

其实就是这里:

读取配置

配置完之后呢,我们需要在对应的地方获取该配置项,获取配置项的方式很简单,通过@value注解即可实现,它的值就是配置项的key

注意:

@value注解是springframework包下面的,可不要用错了!
import org.springframework.beans.factory.annotation.Value;

    // 文件上传路径,从配置项获取
    @Value("$file.uploadFolder")
    private String basePath;

动态获取到配置项之后,我们就可以进行逻辑处理了。这里以文件上传为例,简单的演示以下

package com.wyh.controller;

import cn.hutool.core.util.RandomUtil;
import com.wyh.common.Result;
import com.wyh.entity.User;
import com.wyh.service.impl.IUserServiceImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;

/**
 * @Description: 用户控制器
 * @Author: 魏一鹤
 * @Date: 2022-11-30 22:47
 **/
@RestController
@RequestMapping("/user")
public class UserController 
    @Resource
    IUserServiceImpl userService;
    // 文件上传路径,从配置项获取
    @Value("$file.uploadFolder")
    private String basePath;

  
    /**
     * @Author 魏一鹤
     * @Description 上传文件
     * @Date 21:12 2023/2/5
     **/
    @PostMapping("/upload")
    public Result upload(MultipartFile file) 
        // 原文件
        if (file == null) 
            return Result.fail("请选择文件!");
        
        // 原文件名
        String originalFilename = file.getOriginalFilename();
        // 原文件后缀
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        Calendar calendar = Calendar.getInstance();
        // 当前年份,用于拼接文件上传路径
        String year = String.valueOf(calendar.get(Calendar.YEAR));
        // 当前月份,注意加1,用于拼接文件上传路径
        String month = String.valueOf(calendar.get(Calendar.MONTH) + 1);
        String day = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
        // 新的文件名称
        /*
         *  方案1 新的文件名称:uuid+"_"+源文件名称 String newFileName = UUID.randomUUID().toString() + "_" + originalFilename;
         *  方案2 新的文件名称:当前年+"_"+月 "_"+日+"_"+随机六位数+"_"+源文件名称         String newFileName = year +  "_"+ month +  "_"+day + "_" + RandomUtil.randomNumbers(6) + "_" + originalFilename;
         *   这里选择的是方案2
         **/
        String newFileName = year + "_" + month + "_" + day + "_" + RandomUtil.randomNumbers(6) + "_" + originalFilename;
        // 文件路径
        String filePath = basePath + newFileName;
        //创建一个目录对象
        File dir = new File(basePath);
        //判断当前目录是否存在
        if (!dir.exists()) 
            //目录不存在,需要创建
            dir.mkdirs();
          //将临时文件转存到指定位置
        try 
            file.transferTo(new File(filePath));
         catch (IOException e) 
            e.printStackTrace();
        
        return Result.ok(filePath);
    


 


测试效果

代码写完之后,就可以测试下了

正常上传过来了:

总结

一般我们都是上传到oss或者项目服务器上,也是一样的道理,只是配置项的值不同。通过这种方式,可以更加精准的对文件路径进行控制。方便后面的维护。

以上是关于SpringBoot设置全局上传文件路径并上传文件的主要内容,如果未能解决你的问题,请参考以下文章

springboot整合vue实现上传下载文件

上传的图片不显示在网页上

springboot自带容器的上传文件怎么访问

SpringBoot 2.x :文件上传

SpringBoot上传文件大小设置

springboot zip文件上传无法解压