SpringBoot 文件上传(二)

news2024/11/16 3:23:47

上一节讲解了如何利用MultipartFile接收浏览器端上传的文件:

SpringBoot 文件上传(一)-CSDN博客

这节讲解服务器端如何将文件保存到本地目录下,下节讲解服务端如何将文件保存在阿里云上。

本节需要解决两个难点:

  1. 文件重名问题
  2. 文件大小限制问题

存储文件

首先解决如何存储文件的问题,调用MultipartFile提供的方法transferTo

  • 方法名:transferTo
  • 方法参数:File类型
    @PostMapping("/upload")
    public Result upload(String username, Integer age,MultipartFile image) throws IOException {
        log.info("文件上传:{},{},{}",username,age,image);
        //存储到本地文件中
        image.transferTo(new File("C:\\Users\\luoting\\Desktop\\codeLearn\\java\\day11-SpringBootWeb案例\\01.txt"));
        return Result.success();
    }

但是01.txt固定了文件的名称与类型,所以我们需要解决文件名称和类型的问题

文件类型

MultipartFile提供的方法能够获取客户端传递的原始文件名,通过截取字串的操作获取文件类型

//文件类型   123.1.1.jpg
String originalFilename = image.getOriginalFilename();
//我们需要最后一个点后面的部分
//1、获取最后一个点的坐标
int index=originalFilename.lastIndexOf(".");
//2、截取子串
String extraName = originalFilename.substring(index);

文件名

利用UUID生成唯一的文件名

//文件名
//利用UUID生成
String basicName= UUID.randomUUID().toString();
//生成最终的文件名
String fileName=basicName+extraName;

 最终代码

    @PostMapping("/upload")
    public Result upload(String username, Integer age,MultipartFile image) throws IOException {
        log.info("文件上传:{},{},{}",username,age,image);
        //(一)文件类型   123.1.1.jpg
        String originalFilename = image.getOriginalFilename();
        //我们需要最后一个点后面的部分
        //1、获取最后一个点的坐标
        int index=originalFilename.lastIndexOf(".");
        //2、截取子串
        String extraName = originalFilename.substring(index);
        //(二)文件名
        //利用UUID生成
        String basicName= UUID.randomUUID().toString();
        //生成最终的文件名
        String fileName=basicName+extraName;

        //(三)存储到本地文件中
        image.transferTo(new File("C:\\Users\\luoting\\Desktop\\codeLearn\\java\\day11-SpringBootWeb案例\\"+fileName));
        return Result.success();
    }

用postman测试post文件

注意:

  • post请求的数据要填写在请求体(body)中
  • 选择form-data方式
  • 文件数据记得更改为文件类型

效果:在对应位置存放了相应的文件

 文件大小

在SpringBoot中,默认单个文件的最大上传大小为1M,如果要更改,则需要在application.propertity中增加如下配置:

配置单个文件和单个请求的不同是:可以一次请求上传多个文件

注意配置项只需要记住一个关键词即可:multipart

#配置单个文件上传的最大大小
spring.servlet.multipart.max-file-size=10MB
#配置单个请求上传的最大大小
spring.servlet.multipart.max-request-size=100MB

本地存储方式的缺点

  1. 客户端无法直接访问服务端存储的文件
  2. 如果要存储大量文件,服务端的负荷很重
  3. 如果服务端发生故障,则存储的数据都会失效

于是,下节讲解如何存储到阿里云,当然也可以通过搭建集群的方式

SpringBoot 文件上传(三)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1548948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣---最长回文子串---二维动态规划

二维动态规划思路: 首先,刚做完这道题:力扣---最长有效括号---动态规划,栈-CSDN博客,所以会有一种冲动,设立g[i],表示以第i位为结尾的最长回文子串长度,然后再遍历一遍取最大长度即可…

【PLC】PROFIBUS(二):总线协议DP、PA、FMS

1、总线访问协议 (FDL) 1.1、多主通信 多个主设备间,使用逻辑令牌环依次向从设备发送命令。 特征: 主站间使用逻辑令牌环、主从站间使用主从协议主站在一个限定时间内 (Token Hold Time) 对总线有控制权从站只是响应一个主站的请求它们对总线没有控制…

三轴工作台激光焊接机:实现高精度、高效率焊接的新选择

三轴工作台激光焊接机是一种先进的焊接设备,结合了激光焊接技术与三轴工作台的运动控制,实现了焊接过程的高效、精准与自动化。这种设备主要利用激光束的高能量密度和高速度特性,使工件在熔化的同时快速冷却凝固,从而达到高质量的…

n-皇后问题(DFS深搜两种解法)

题目描述: 思路: 根据题目要求:即任意两个皇后都不能处于同一行、同一列或同一斜线上。我们可以画图去看一下。对角线之间有什么规律可以发掘出来。接下来请看图解 根据上述图片,我们可以把正对角线看成撇对角线,也就…

分享300套常用的多行业商城模板和电商模板

小程序商城模板平台!免费用多行业商城模板和电商模板,含小程序商城模板,多款精美高端电商模板免费使用,注册即用免费电商模板开发在线商城。 https://www.erdangjiade.com/templates/4-0-0-0-0-0 实现微信小程序携程首页顶部的界…

通过修改ospf的COST值来控制路由选路

配置好OSPF之后,发现默认走的是上面 PC1>tracert 192.168.200.1traceroute to 192.168.200.1, 8 hops max (ICMP), press Ctrl+C to stop1 192.168.100.254 16 ms <1 ms 16 ms2 10.10.10.2 15 ms &l

python入门题:输入输出练习

以下是Python基础语法的练习&#xff0c;项目要求和代码如下&#xff1a; """ 例3&#xff1a;小精灵&#xff1a;你好&#xff0c;欢迎古灵阁&#xff0c;请问您需要帮助吗&#xff1f;需要or不需要&#xff1f; 你&#xff1a;需要 小精灵&#xff1a;请问你需…

AutoCAD 2025(CAD2025)激活版

AutoCAD 2025 是一款由 Autodesk 公司开发的计算机辅助设计&#xff08;CAD&#xff09;软件。它广泛应用于建筑设计、机械制造、土木工程等领域。 AutoCAD 2025 提供了强大的绘图和设计工具&#xff0c;使用户能够创建精确的二维和三维图形。它支持多种绘图方式&#xff0c;如…

IDEA2023版本创建spring boot项目时,Java版本无法选择Java8问题解决

先简单说下出现本问题的原因&#xff1a; spring boot3.0发布时提到未来Java17将会成为主流版本&#xff0c;所有的Java EE Api都需要迁移到Jakarta EE上来。而spring boot3.0及以上版本已经不支持Java8了&#xff0c;支持Java17及以上版本。同时官方支持项目初始化的 Spring B…

Unity数独完整源码

支持的Unity版本&#xff1a;2018.1或更高。 这是一套完整且高效的数独源码&#xff0c;默认是9x9&#xff0c;有上千种关卡文件&#xff0c;4种难度&#xff0c;内有关卡编辑器&#xff0c;可扩展至4x4、6x6的关卡&#xff0c;还有英文文档对源码各方面可配置的地方进行说明&…

openGauss + Datakit搭建openGauss运维平台

系统架构OS 硬件需求&#xff1a;2c4g [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# uname -m x86_64 [rootlocalhost ~]# hostname -I 192.168.92.32 下载地址&#xff1a;https://opengauss.org/zh/download/ 下载…

Django之Web应用架构模式

一、Web应用架构模式 在开发Web应用中,有两种模式 1.1、前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示。前端与后端的耦合度很高 1.2、前后端分离 在前后端分离的应用模式中,后端仅返…

搜索树概念及操作

目录 一. .搜索树 1.1 概念 1.2 操作1 查找 1.3 操作2 插入 1.4 操作3 删除 1.5 性能分析 1.6 和 java 类集的关系 一. .搜索树 1.1 概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树 : 若它的左子树不为空&#x…

C语言程序练习——汉诺塔递归

1. 题目 在终端输入汉诺塔层数n&#xff0c;实现将n层汉诺塔通过三座塔座A、B、C进行排列 2. 代码 #include <stdio.h>int hannuota(int len, int str, int tmp, int dst) {if (1 len){printf("%c -> %c\n", str, dst);}else{hannuota(len-1, str, dst, …

【每日一题】2024年3月汇编(上)

3.1【2369】检查数组是否存在有效划分 2369. 检查数组是否存在有效划分https://leetcode.cn/problems/check-if-there-is-a-valid-partition-for-the-array/ 1.这样的判断可以用动态规划来解决&#xff0c;用一个长度为(n1) 的数组来记录 是否存在有效划分&#xff0c;dp[i]…

单页面应用部署到iis上可以正常打开,刷新就404

当您遇到Dumi打包的网站部署到IIS上可以正常打开首页,但刷新页面时出现404错误的情况,这通常与以下几个方面有关: 路由处理: Dumi生成的项目通常基于SPA(Single Page Application)架构,使用前端路由来实现无刷新导航。这意味着大部分页面切换是在浏览器层面完成的,而不…

循环神经网络(RNN):处理序列数据的利器

目录 1. 引言 2.RNN原理与时间步展开 3.LSTM与GRU工作机制与优势 3.1.LSTM&#xff08;Long Short-Term Memory&#xff09; 3.2.GRU&#xff08;Gated Recurrent Unit&#xff09; 4.应用案例 4.1文本生成 4.2情感分析 5.总结 1. 引言 循环神经网络&#xff08;Recurr…

el-select动态禁用

在一个el-form表单中有5个el-form-item; 每个el-form-item是一个el-select控件&#xff1b; 这5个el-select控件遵循这样的规则&#xff0c;都是使用同一个list集合&#xff0c;如果第一个el-select选择了list中的某一项&#xff0c;那么这一项就被禁用&#xff1b;其他的el-…

【3D目标检测】Det3d—SE-SSD模型训练(前篇):KITTI数据集训练

SE-SSD模型训练 1 基于Det3d搭建SE-SSD环境2 自定义数据准备2.1 自定义数据集标注2.2 训练数据生成2.3 数据集分割 3 训练KITTI数据集3.1 数据准备3.2 配置修改3.3 模型训练 1 基于Det3d搭建SE-SSD环境 Det3D环境搭建参考&#xff1a;【3D目标检测】环境搭建&#xff08;OpenP…

【Entity Framework】Code First 数据批注

【Entity Framework】Code First 数据批注 文章目录 【Entity Framework】Code First 数据批注一、概述二、模型二、键Key三、组合键四、外键-ForeigKey第一种&#xff1a;指定导航属性&#xff0c;会自动生成外键&#xff0c;命名规则为&#xff1a;“对象名称_主键名“第二种…