wordpress文章迁移到dz论坛/广州seo网站服务公司
前言
在后端处理文件上传的时候,我们通上传文件的时候,一般这个路径不会随便写。
比如这篇文章中的路径:解决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或者项目服务器上,也是一样的道理,只是配置项的值不同。通过这种方式,可以更加精准的对文件路径进行控制。方便后面的维护。