当前位置: 首页 > news >正文

spring 如何将mutipartFile转存到本地磁盘

两者的区别和联系

  • MutipartFilespring的一部分,File则是java的标准类
  • MutipartFile用于接收web传递的文件,File操作本地系统的文件

MutipartFile 转换File的三种方式

  • 使用MutipartFile 自带的transferTo方法
  • 使用java自带的FileOutPutStream流
  • 使用java自带的NIO方法

transferTo保存

在这里插入图片描述

代码

参数:目标文件的绝对路径

    /*** Upload file 使用MultipartFile接收文件 transferTo方法保存文件* @param file file* @return*/@PostMapping("/upload")public String upload(@RequestParam("file") MultipartFile file) {// 判断文件是否为空if (file.isEmpty()) {return "File is empty!";}try {// 设置文件存储路径String uploadFolder = UPLOAD_FOLDER;// 判断文件夹是否存在,不存在则创建File folder = new File(uploadFolder);if (!folder.exists()) {folder.mkdirs();}// 获取文件名String fileName = file.getOriginalFilename();// 设置文件存储路径File targetFile = new File(uploadFolder + File.separator + fileName);// 保存文件file.transferTo(targetFile);} catch (Exception e) {e.printStackTrace();}return "Upload successfully!";}

测试

借助apifox工具测试,MutipartFile 选择body
在这里插入图片描述

在这里插入图片描述

测试结果:同时创建了文件夹和文件

在这里插入图片描述

使用原生的FileOutputStream保存文件

  1. 创建 FileOutputStream
  2. 将MultipartFile 文件转换为字节数组输入到FileOutputStream流中,保存文件
    /*** 使用原生的FileOutputStream保存文件*/@PostMapping("/upload2")public String upload2(@RequestParam("file") MultipartFile file) {// 判断文件是否为空if (file.isEmpty()) {return "File is empty!";}try {// 设置文件存储路径String uploadFolder = UPLOAD_FOLDER;// 判断文件夹是否存在,不存在则创建File folder = new File(uploadFolder);if (!folder.exists()) {folder.mkdirs();}// 获取文件名String fileName = file.getOriginalFilename();// 设置文件存储路径File targetFile = new File(uploadFolder + File.separator + fileName);// 保存文件 使用原生的FileOutputStream保存文件try(FileOutputStream fileOutputStream = new FileOutputStream(targetFile)) {fileOutputStream.write(file.getBytes());}} catch (Exception e) {e.printStackTrace();return "Upload failed!";}return "Upload successfully!";}

NIO复制文件

  • 使用Files工具类的copy方法,三个参数:
  • 源文件的输入流
  • 目标文件的文件夹
  • 特殊操作:REPLACE_EXISTING的作用是 若存在则替换
    /*** 使用原生的NIO复制保存文件*/@PostMapping("/upload3")public String upload3(@RequestParam("file") MultipartFile file) {// 判断文件是否为空if (file.isEmpty()) {return "File is empty!";}try {// 设置文件存储路径String uploadFolder = UPLOAD_FOLDER;// 判断文件夹是否存在,不存在则创建File folder = new File(uploadFolder);if (!folder.exists()) {folder.mkdirs();}// 获取文件名String fileName = file.getOriginalFilename();// 设置文件存储路径File targetFile = new File(uploadFolder + File.separator + fileName);// 保存文件 使用原生的NIO复制保存文件Files.copy(file.getInputStream(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);} catch (Exception e) {e.printStackTrace();return "Upload failed!";}return "Upload successfully!";}

相关文章:

spring 如何将mutipartFile转存到本地磁盘

两者的区别和联系 MutipartFile是spring的一部分,File则是java的标准类MutipartFile用于接收web传递的文件,File操作本地系统的文件 MutipartFile 转换File的三种方式 使用MutipartFile 自带的transferTo方法使用java自带的FileOutPutStream流使用java自…...

【学术会议-6】激发灵感-计算机科学与技术学术会议邀您参与,共享学术盛宴,塑造明天的科技梦想!

【学术会议-6】激发灵感-计算机科学与技术学术会议邀您参与,共享学术盛宴,塑造明天的科技梦想! 【学术会议-6】激发灵感-计算机科学与技术学术会议邀您参与,共享学术盛宴,塑造明天的科技梦想! 文章目录 【…...

模电基础(晶体管放大电路)

1.放大电路 1.1基本共射放大电路工作原理 1.1.1电路的组成和作用 各器件的作用 ​​​​​​(1)(交流电源):输入电路的有用信号,也就是我们需要去放大的信号 (2)(反馈…...

Python3 接口自动化测试,HTTPS下载文件(GET方法和POST方法)

Python3 接口自动化测试,HTTPS下载文件(GET方法和POST方法) requests-pkcs12 PyPI python中如何使用requests模块下载文件并获取进度提示 1、GET方法 1.1、调用 # 下载客户端(GET)def download_client_get(self, header_all):try:url = self.host + "/xxx/v1/xxx-mod…...

rhce:列行性(at和cron)

配置 at练习 设置时间提醒 定义一分钟后显示命令,使用atq查看 cron练习 配置 systemctl status crond 查看文件所在位置 ll /var/spool/cron/ 主要功能 开始操作 进入界面操作每天早上9点说hello crontab -e 五个星号分别代表分时日月周,其次是执…...

kubernetes给service动态增加服务端口

根据kubernetes官方文档的说明,service的ports规则支持merge操作: portsServicePort arraypatch strategy: mergepatch merge key: portThe list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-…...

如何将 html 渲染后的节点传递给后端?

问题 现在我有一个动态的 html 节点,我想用 vue 渲染后,传递给后端保存 思路 本来想给html的,发现样式是个问题 在一个是打印成pdf,然后上传,这个操作就变多了 最后的思路是通过 html2canvas 转化成 canvas 然后变成…...

ubuntu24 finalshell 无法连接ubuntu服务器, 客户端无法连接ubuntu, 无法远程连接ubuntu。

场景: 虚拟机新创建一个最小化的ubuntu服务器,使用finalshell连接服务,发现连接不上。 1. 查看防火墙ufw 是否开启,22端口是否放行 2. 查看是否安装openssh server, 并配置 我的问题是安装了openssh server 但是没有配置root可…...

牛客编程初学者入门训练——BC19 牛牛的对齐

BC19 牛牛的对齐 描述 读入 3 个整数,牛牛尝试以后两个数字占 8 个空格的宽度靠右对齐输出。 输入描述: 输入三个整数,用空格隔开。 输出描述: 输出 3 个整数以第二三个数字占 8 个空格靠右对齐输出 示例1 输入&#xff1a…...

log file sync 内部执行过程

通常oracle的log file sync执行大致印象是等待cpu、log file parallel write、等待cpu,遇到问题主要考虑lgwr自适应模式参数要关闭、io性能、cpu瓶颈、归档数量和大小等,但是内部执行内容其实很多,尤其是有ADG了以后。 log file sync主要执行…...

【动手学深度学习】7.5 批量规范化(个人向笔记)

训练深层神经网络是十分困难的,特别是在较短的时间内使它们收敛更加棘手。而本节的批量规范化(batch normalization) 可以持续加速深层网络的收敛速度结合下节会介绍道德残差块,批量规范化使得研究人员能够训练100层以上的网络 1.…...

111 - exercise 5

一 public class Dummy {private static int a 3;private static int b 5;private static int c 7;public static void main(String... arguments) {int a 1, b 2;System.out.println("" a (a - b) c);} }这个Java程序中有两个a和b变量,一个是类…...

第二十五:IP网络层的数据,IP数据报

在数据链路层传输的数据叫帧,帧是数据链路层的传输单元。 那么在IP网络层的数据也有一个叫法IP数据报。 IP数据报 IP数据报首部 数据。 数据是传输层传递过来的报文;IP数据报首部格式如下: IP 报头的最小长度为 20 字节,上图…...

三菱FX3UPLC机械原点回归- DSZR/ZRN指令

机械原点回归用指令的种类 产生正转脉冲或者反转脉冲后,增减当前值寄存器的内容。可编程控制器的定位指令,可编程控制器的电源0FF后,当前值寄存器清零,因此上电后,请务必使机械位置和当前值寄存器的位置相吻合…...

网络通信与并发编程(三)粘包现象解决方案、socketserver实现并发

粘包现象解决方案、socketserver实现并发 文章目录 粘包现象解决方案、socketserver实现并发一、粘包现象解决方案1.发送数据大小2.发送数据信息 二、socketserver实现并发1.tcp版的socketserver并发2.udp版的socketserver并发 一、粘包现象解决方案 1.发送数据大小 有了上一…...

使用Uniapp开发微信小程序实现一个自定义的首页顶部轮播图效果?

在Uniapp中开发微信小程序,并实现自定义首页顶部轮播图的效果,可以通过使用Uniapp的组件如swiper和swiper-item来完成。这是一个常见的需求,下面是一个完整的示例代码,展示如何实现一个简单的自定义轮播图效果。 创建页面结构 首…...

软硬连接及动静态库

目录 一、理解文件系统在磁盘中的存储 (1)inode是什么 (2)硬链接 (3)软链接 二、动静态库 (1)静态库 二、动态库 三、在链接动静态库的时候如何不用指定路径 一、理解文件系统…...

vue3.0 + vite:中使用 sass

1、安装依赖 npm i sass sass-loader --save-dev 在项目的src/assets文件夹下新建style/index.scss 文件 2、在 vite.config.ts 中加: resolve: {alias: {: fileURLToPath(new URL(./src, import.meta.url))} }, css: {// 配置 SCSS 支持preprocessorOptions: {s…...

搭建`mongodb`副本集-开启权限认证 mongo:7.0.5

搭建mongodb副本集-开启权限认证 mongo:7.0.5 1.5.1、创建文件 创建配置文件保存目录和数据保存目录 mkdir -p /data/mongodb/{/conf,/data,/logs}生成和设置权限 这个文件一定要在一个服务里面生成然后复制到其它服务器,所有服务器的这个key一定是相同的。 op…...

智能工厂的软件设计 由“原力“篇引发的思考: 回顾、展望和本位 之2 修订稿之2

Q15、《“工厂”篇》其前的《“公共逻辑”》篇 提出的三个专门工厂(抽象/项目/产品)以及 再之前 讨论的各自的“专项运作逻辑”(辩证/数理/形式)之间协作的“整体概念运作”“概念模式”给出一个标准的“公共逻辑”的“语言模板”…...

突破式4大技术实现99%硬字幕提取准确率:video-subtitle-extractor全解析

突破式4大技术实现99%硬字幕提取准确率:video-subtitle-extractor全解析 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕…...

无需重装!快速迁移Unreal Engine(UE4/UE5)到新磁盘的完整指南(2024最新,Win11适用)

1. 为什么需要迁移Unreal Engine到新磁盘? 很多开发者都遇到过这样的困扰:当初安装Unreal Engine时选择的磁盘空间不足了,或者想要把引擎转移到更快的SSD上提升工作效率。重新下载安装不仅耗时(动辄几十GB的安装包)&am…...

SEO优化排名报价一般多少钱_如何针对不同搜索引擎进行SEO优化排名

SEO优化排名报价一般多少钱_如何针对不同搜索引擎进行SEO优化排名 在当今的数字时代,SEO优化排名已经成为企业网站提升流量、吸引客户的重要手段。SEO优化排名报价一般多少钱,以及如何针对不同搜索引擎进行有效的SEO优化,是许多企业在决定是…...

DGIOT规则引擎完全指南:构建智能物联网业务逻辑的10个技巧

DGIOT规则引擎完全指南:构建智能物联网业务逻辑的10个技巧 【免费下载链接】dgiot Open source platform for iot , 6 min Quick Deployment,10M devices connection,Carrier level Stability;物联网开源平台,6分钟快速部署,千万级承载,电信级稳定性. Low code for …...

PyTorch-OpCounter终极指南:10个常见问题快速解决模型计算量统计难题

PyTorch-OpCounter终极指南:10个常见问题快速解决模型计算量统计难题 【免费下载链接】pytorch-OpCounter Count the MACs / FLOPs of your PyTorch model. 项目地址: https://gitcode.com/gh_mirrors/py/pytorch-OpCounter PyTorch-OpCounter(TH…...

2026最新大模型学习路线图!小白转行AI,这可能是你最好的起点!

大模型目前在可以说正处于一种“炙手可热”的状态,吸引了很多人的关注和兴趣,也有很多新人小白想要学习大模型技术,转战AI领域,以适应未来的大趋势,寻求更有前景的发展!2026最新大模型学习路线 一个明确的学…...

效率提升:用快马AI构建集成化web终端效率工具面板

效率提升:用快马AI构建集成化web终端效率工具面板 作为一个经常需要操作终端命令的开发者,我一直在寻找提升效率的方法。本地工具如xshell8确实好用,但每次换设备都要重新配置,而且无法轻松分享给团队成员。最近尝试用InsCode(快…...

Linux线程创建机制与多线程编程实践

1. Linux线程创建机制解析在Linux系统中,线程创建是一个内核态与用户态协同工作的过程。与进程不同,线程不是完全由内核实现的机制,而是通过glibc库函数与内核系统调用的配合完成的。理解线程创建机制对开发高性能多线程程序至关重要。线程与…...

CSS定位如何实现模态框垂直居中_使用负边距或transform

transform: translate(-50%, -50%) 是最稳的居中方式,配合 position: absolute 或 fixed 及 top: 50%、left: 50%,可无视元素尺寸变化实现精准居中,且兼容滚动与响应式场景。用 transform: translate(-50%, -50%) 是最稳的居中方式绝对定位 …...

通过 Nanobot 源码学习架构 ---(4)SubAgent

OpenClaw 应该有40万行代码,阅读理解起来难度过大,因此,本系列通过Nanobot来学习 OpenClaw 的特色。Nanobot是由香港大学数据科学实验室(HKUDS)开源的超轻量级个人 AI 助手框架,定位为"Ultra-Lightweight OpenClaw"。非…...