前言

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

比如这篇文章中的路径:解决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 {@ResourceIUserServiceImpl 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设置全局上传文件路径并上传文件相关推荐

  1. fopen文件路径怎么写_PHP文件上传

    文件系统处理的作用: 1. 所有的项目离不开文件处理 2. 可以用文件长时间保存数据 3. 建立缓存, 服务器中文件操作 文件处理 1. 文件类型 以Linux为模型的, 在Windows只能获取fi ...

  2. linux unix mac windows,文件路径-windows上的反斜杠和Mac OS/Linux/Unix上的正斜杠,Windows,倒,以及,macOSLinuxUNIX...

    文件路径 - Windows 上的倒斜杠以及 macOS / Linux / UNIX 上的正斜杠 1. 正斜杠 (斜杠 / ) 和反斜杠 (倒斜杠 \ ) Windows - 正斜杠,左斜杠,斜杠符 ...

  3. java 通过文件路径获得MulipartFile类型文件 - File转MulipartFile

    java 通过文件路径获得MulipartFile类型文件 - File转MulipartFile 方式一:使用MockMultipartFile函数 方式二:数据流实现 思路:路径创建出File文件 ...

  4. python进阶14文件路径(找不到文件)

    原创链接:python进阶14文件路径(找不到文件) 开发时遇到问题,文件路径不正确,找不到文件等等,都是这一类问题. curdir,argv,file 举例: 文件1代码: 1 2 3 4 5 6 ...

  5. tp5上传文件并获取文件路径_TP5上传文件

    TP5上传文件与上传图片雷同!!!!!其实都差不多的!!!!用到了js插件 1.首先引用 2.form表单内  最重要的就是   这个属性    enctype="multipart/for ...

  6. vb打开ftp服务器文件路径,VB上传指定文件到FTP指定目录。。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 目前用如下代码能够实现上传,但是不能上传到指定目录去..怎么改变? Option Explicit Private Const INTERNET_OPEN ...

  7. python,os操作文件,文件路径(上一级目录)

    转载一篇连接,查资料时发现的,对我帮助不小 链接 链接2 os.path.dirname用法 目录结构 我的目录结构: 目录结构 os.path.dirname(path) 语法:os.path.di ...

  8. 项目在云服务器上的绝对路径,服务器上的绝对路径怎么写

    服务器上的绝对路径怎么写 内容精选 换一换 为加强对系统数据的容灾管理,云堡垒机支持配置日志备份,提高审计数据安全性和系统可扩展性.本小节主要介绍如何在系统配置FTP/SFTP服务器参数,将日志远程备 ...

  9. c 服务器文件路径,c打开服务器文件路径

    c打开服务器文件路径 内容精选 换一换 文件作用:可以关闭/打开监听端口.指定监听端口.指定监听IP等.文件路径:Atlas 300场景下,在Host侧服务器上,在~/ide_daemon目录下查看i ...

最新文章

  1. 计算机专业专业课的准备
  2. 《LeetCode力扣练习》剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java
  3. 拉格朗日插值法(Lagrange)
  4. 首个实时单目3D目标检测算法:RTM3D,代码将开源
  5. P01:01背包问题(转)
  6. 女儿还有三个月就高考了,最近压力大,特别敏感,容易发火怎么办?
  7. android sqlitelog,如何解决Sqlitelog(13)语句中止在PhoneGap中的68错误android
  8. 面试:Android网络优化
  9. CrossOver Mac2022双系统虚拟机软件
  10. jsjq面试笔记(上)
  11. 怎样快速提升自身的编程水平?
  12. 乐动手环app下载安装_乐动健康手环app下载-乐动健康客户端v2.34 安卓最新版 - 极光下载站...
  13. 夏令营一部分数学试题
  14. MATLAB实现一元三次方程求解/盛金公式
  15. Springboot 对应XSS漏洞类配置处理
  16. linux给命令取别名,简化常用的linux命令
  17. 二十行Python代码,带你了解扣扣发生大规模账号泄露前因后果
  18. 华为mate10pro计算机设置,华为mate10 pro双清教程,怎么进recovery清理数据和恢复出厂...
  19. 博物馆逛不完、记不住?扩展现实(XR)技术来帮你!
  20. uCOS-II PC编译环境搭建(基于BC45)

热门文章

  1. 智能窗帘研究制作_基于单片机的智能窗帘设计
  2. 11大Java开源中文分词器的使用方法和分词效果对比(转)
  3. 福州大学计算机基础教学与等级考试暂行规定,福州大学计算机基础教学与等级考试暂行规定...
  4. 西工大计算机操作系统实验报告,西工大计算机操作系统课程设计实验报告bh05xh5...
  5. 知识分享!Wi-Fi HaLow 和传统 Wi-Fi 的区别-道合顺大数据Infinigo
  6. Mask R-CNN 训练自己的数据集(balloon过程+报错解释)
  7. 纯色图片颜色渐变动画
  8. 中国LINUX公社(论坛)
  9. 斑马打印机ZDesigner GK888t (EPL)型号的java集成
  10. M-K趋势检验以及突变检验