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设置全局上传文件路径并上传文件的主要内容,如果未能解决你的问题,请参考以下文章