Springboot文件上传机制[通俗易懂]

Springboot文件上传机制[通俗易懂]springboot文件上传机制:1.访问路径2. 上传完成后返回访问文件地址3. 我们只需要访问返回的地址就可以访问到图片4. yaml配置文件(localpath是实际存储的地址)5. 添加配置类,进行访问地址和存储地址映射 @Value(“${file.upload.suffixPath}”) private String uploadSuffixPath; @Value(“${file.upload.localPath}”) private Strin

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

springboot文件上传机制:

注意,存储到数据库中的只是路径名
1.访问路径在这里插入图片描述
2. 上传完成后返回访问文件地址
在这里插入图片描述
3. 我们只需要访问返回的地址就可以访问到图片
在这里插入图片描述
4. yaml配置文件(localpath是实际存储的地址)
在这里插入图片描述
5. 添加配置类,进行访问地址和存储地址映射

    @Value("${file.upload.suffixPath}")
    private String uploadSuffixPath;
    @Value("${file.upload.localPath}")
    private String uploadLocalPath;
	@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){ 
   
        AppFileUtils.uploadSuffixPath = uploadSuffixPath;
        AppFileUtils.uploadLocalPath = uploadLocalPath;
        registry.addResourceHandler(uploadSuffixPath+"/**").addResourceLocations("file:"+uploadLocalPath);
    }
  1. 实际上传文件代码
package com.yglh.utils;
import org.aspectj.util.FileUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Random;
@Component
public class AppFileUtils { 

private final static Logger logger = LoggerFactory.getLogger(FileUtil.class);
/** * 文件上传路径前缀 */
public static String uploadSuffixPath;
/** * 本地磁盘目录 */
public static String uploadLocalPath;
/** * date format yyyyMMdd */
public static final String PATTERN_yyyyMMdd = "yyyyMMdd";
/** * date format yyyyMMddHHmmssSSS */
public static final String PATTERN_yyyyMMddHHmmssSSS = "yyyyMMddHHmmssSSS";
/** * @Description: 单文件上传到本地磁盘 * @param multipartFile * @return: java.lang.String * @Author: lxt * @Date: 2021/3/29 10:30 */
public static String uploadFile(MultipartFile multipartFile){ 

if(multipartFile == null){ 

return null;
}
//产生文件名称
String fileName = getUploadFileName(multipartFile.getOriginalFilename());
//产生文件目录
String dateDir = format(null,PATTERN_yyyyMMdd);
File destFileDir = new File(uploadLocalPath + File.separator + dateDir);
//因为目录每天凌晨更新所以要判断是否存在,如果不存在就创建新的文件
if(!destFileDir.exists()){ 

destFileDir.mkdirs();
}
try { 

//把上传文件到目的目录中去
File destFile = new File(destFileDir.getAbsoluteFile()+File.separator+fileName);
multipartFile.transferTo(destFile);
logger.info("文件【"+multipartFile.getOriginalFilename()+"】上传成功");
return uploadSuffixPath + "/" + dateDir+"/"+fileName;
} catch (IOException e) { 

logger.error("文件上传异常:"+multipartFile.getOriginalFilename(),e);
return null;
}
}
/** * @Description: 获取上传后的文件相对路径 --数据库存储该路径 * @param fileName * @return: java.lang.String * @Author: lxt * @Date: 2021/3/29 10:30 */
public static String getUploadFileName(String fileName){ 

return new StringBuilder()
.append(format(null, PATTERN_yyyyMMddHHmmssSSS))
.append("_").append(getRandomStrByNum(6))
.append(getExtension(fileName))
.toString();
}
/** * 格式化时间 * @param localDateTime * @param pattern 格式 * @return */
public static String format(LocalDateTime localDateTime, String pattern){ 

//默认取当前时间
localDateTime = localDateTime == null ? LocalDateTime.now() : localDateTime;
return localDateTime.format(DateTimeFormatter.ofPattern(pattern));
}
public static String CHAR_STR = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/** * @Title: getRandomStrByNum * @Description: 获取不同位数的随机字符串 * @Author: lxt * @param: factor * @return: java.lang.String * @throws: */
public static String getRandomStrByNum(int factor) { 

StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < factor; i++) { 

sb.append(CHAR_STR.charAt(random.nextInt(36)));
}
return sb.toString();
}
/** * @Description: 获取扩展名 * @param fileName * @return: java.lang.String * @Author: lxt */
public static String getExtension(String fileName){ 

return fileName.substring(fileName.lastIndexOf("."));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168998.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • navicat15 for mac激活码【2022最新】

    (navicat15 for mac激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/ide…

  • 浓缩就是精华「建议收藏」

    浓缩就是精华「建议收藏」 『凡人牧场』人生启示录:被称为世上最经典的25句话(转载)   作者:晶晶鱼 提交日期:2003-12-3115:32:40    1,记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。      2,能冲刷一切的除了眼泪,就是时间,以时间来推移感情,时间越长,冲突越淡,仿佛不断稀释的茶。      3,怨言是上天得至人类最大的供物,也是人

  • Java解析XML文件的方式

    Java解析XML文件的方式在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求。一般来讲,有基于DOM树和SAX的两种解析xml文件的方式,在这部分里,将分别给大家演示通过这两种方式解析xml文件的一般步骤。1XML的文件格式XML是可扩展标记语言(ExtensibleMarkupLanguage)的缩写,…

  • 3D空间中射线与三角形的交叉检測算法

    3D空间中射线与三角形的交叉检測算法

  • 博科SAN交换机zone配置(华为SNS系列交换机为例OEM博科)[通俗易懂]

    博科SAN交换机zone配置(华为SNS系列交换机为例OEM博科)[通俗易懂]一、zone的定义Zone是Brocade交换机上的标准功能,FCSWITCH上的Zone功能类似于以太网交换机上的VLAN功能,它是将连接在SAN网络中的设备(主机和存储),逻辑上划到为不同的区域内,使得不同区域中的设备相互间不能FC网络直接访问,从而实现网络中的设备之间的相互隔离。二、Zone的功能包含以下两点:1.防止主机节点访问未经授权的存储。Zone中的设备只能访问同一Zone中连接到Fabric的其它设备。不在Zone中的设备不能被Fabric中的其他设备访问。2.隔离不必要状态

  • sd/tf卡槽是什么_usb电源线接法图解

    sd/tf卡槽是什么_usb电源线接法图解SDIO接线作为SD的4-bit传输模式下的接法,在RK3399上的应用,实现双TF卡无法识别闪迪卡解决办法1.硬件接线图如上图是SDIO接口接为TF接口的电路实现双TF卡功能,模式是4-bit,注意22R电阻要加上,尽量靠近3399摆放,但是调试的时候遇到一个问题,其他类型卡都可以识别,唯独闪迪卡无法识别,找了很久,最后发现TF卡电源VDD需要接3V0才可以解决。2,查看了资料,发现VDD关系到读卡的电压问题,如下图,闪迪卡在插入的时候会告知系统是否需要切换1.8…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号