SpringBoot 文件上传(二)

上一节讲解了如何利用MultipartFile接收浏览器端上传的文件,这节讲解服务器端如何将文件保存到本地目录下,下节讲解服务端如何将文件保存在阿里云上。

本节需要解决两个难点:

  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.jpgString 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. 如果服务端发生故障,则存储的数据都会失效

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt】使用Qt实现Web服务器(七):动态模板引擎

1、示例 2、源码 2.1 模板配置参数 配置文件中关于模板配置参数如下 path为存放模板的目录suffix为模板文件后缀[templates] path=templates suffix=.tpl encoding=UTF-8 cacheSize=1000000

案例实践 | 基于长安链的煤质检测智慧实验室

案例名称-煤质检测智慧实验室 ■ 建设单位 国能数智科技开发(北京)有限公司 ■ 用户群体 煤炭生产单位、电力单位、化工单位等产业链上下游单位 ■ 应用成效 化验效率提升50%,出验时间缩短40%,提高化验数据市场公信力 案例…

【漏洞复现】福建科立迅通信指挥调度平台pwd_update.php SQL注入漏洞 (CVE-2024-2621)

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

JavaEE-文件操作和IO

我们先来认识狭义上的⽂件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进⾏数据保存时,往往不是保存成⼀个整体,⽽是独⽴成⼀个个的单位进⾏保存,这个独⽴的单位就被抽象成⽂件的概念,就类似办公桌上的⼀份份真…

android.os.TransactionTooLargeException解决方案,Kotlin

android.os.TransactionTooLargeException解决方案,Kotlin 首先,特意制造一个让Android发生TransactionTooLargeException的场景,一个Activity启动另外一个Activity,在Intent的Bundle里面塞入一个大的ArrayList: import android.…

Flutter学习10 - Json解析与Model使用

对于网络请求返回的 Json 数据&#xff0c;一般会进行如下解析&#xff1a; 将 Json String 解析为 Map<String, dynamic>将 Json String 解析为 Dart Model 发起一个返回 Json String 的网络请求 import package:http/http.dart as http;void main() {_doGet(); }_do…

【LeetCode】升级打怪之路 Day 26:回溯算法 — 集合划分问题

今日题目&#xff1a; 698. 划分为k个相等的子集 | LeetCode473. 火柴拼正方形 | LeetCode 参考文章&#xff1a; 经典回溯算法&#xff1a;集合划分问题 目录 LC 698. 划分为k个相等的子集 【classic&#xff0c;有难度】数据预处理&#xff1a;计算 target基本回溯优化 1&…

【计算机网络】常见面试题汇总

文章目录 1.计算机网络基础1.1网络分层模型/OSI七层模型是什么&#xff1f;1.2TCP/IP四层模型是什么&#xff1f;每一层的作用&#xff1f;1.2.1TCP四层模型&#xff1f;1.2.2为什么网络要分层&#xff1f; 1.2常见网络协议1.2.1应用层常见的协议1.2.2网络层常见的协议 2.HTTP2…

opencv 十八 python下实现0缓存掉线重连的rtsp直播流播放器

使用opencv打开rtsp视频流时&#xff0c;会因为网络问题导致VideoCapture掉线&#xff1b;也会因为图像的后处理阶段耗时过长导致opencv缓冲区数据堆积&#xff0c;从而使程序无法及时处理最新的数据。为此对cv2.VideoCapture进行封装&#xff0c;实现0缓存掉线重连的rtsp直播流…

亚马逊云科技:企业如何开启生成式AI之旅?

如果要评选最近两年全球科技行业最热门的细分领域&#xff0c;那么生成式AI绝对会以遥遥领先的票数成为当仁不让的冠军。 然而眼见生成式AI发展得如火如荼&#xff0c;越来越多的企业却陷入了深深的焦虑&#xff1a;应该如何开启生成式AI之旅&#xff1f;又该怎样搭建大模型&am…

鸿蒙Harmony应用开发—ArkTS-像素单位

ArkUI为开发者提供4种像素单位&#xff0c;框架采用vp为基准数据单位。 说明&#xff1a; 本模块首批接口从API version 7开始支持&#xff0c;后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 名称描述px屏幕物理像素单位。vp屏幕密度相关像素&#xff0c;…

Vue使用font-face自定义字体详解

目录 1 介绍2 使用2.1 语法2.2 属性说明2.3 Vue使用案例2.3.1 全局定义字体2.3.2 在页面使用 3 注意事项 1 介绍 font-face 是 CSS 中的一个规则&#xff0c;它允许你加载服务器上的字体文件&#xff08;远程或者本地&#xff09;&#xff0c;并在网页中使用这些字体。这样&am…