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

如何在macOS上免费解锁QQ音乐加密文件:完整指南

如何在macOS上免费解锁QQ音乐加密文件:完整指南 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转换结果…...

组态王通用扫码枪配置

使用组态王扫码枪驱动,是绑定变量,扫码后直接就可以显示扫码内容。解决每次扫码输入数据时必须先用鼠标点进输入框内的问题。驱动安装先添加驱动,亚控网站的文件为 barcodescanner,这个文件是组态王通用扫码枪的驱动,但…...

5个必知的Universal-Updater高级功能:从QR扫描到后台安装

5个必知的Universal-Updater高级功能:从QR扫描到后台安装 【免费下载链接】Universal-Updater An easy to use app for installing and updating 3DS homebrew 项目地址: https://gitcode.com/gh_mirrors/un/Universal-Updater Universal-Updater是一款专为任…...

基于PIC32的嵌入式MIDI合成器:从波表合成到硬件实现

1. 项目概述:一个基于嵌入式微控制器的MIDI声音合成器如果你对电子音乐制作、嵌入式开发,或者DIY硬件合成器感兴趣,那么“REMI Synth”这个项目绝对值得你花时间深入了解。它本质上是一个数字单音MIDI控制的声音合成器,核心是一块…...

3分钟开启PC游戏分屏派对:NucleusCoop让单机游戏秒变多人同屏神器

3分钟开启PC游戏分屏派对:NucleusCoop让单机游戏秒变多人同屏神器 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 还在为热门PC游戏不支…...

风控系统如何全维度识别爬虫:IP、账号与行为的协同决策机制

1. 这不是“反爬失败”,而是风控系统在对你做全维度画像你写完一段 requests BeautifulSoup 的代码,本地跑通了,开开心心部署到服务器,结果第二天早上发现:所有请求返回 403,日志里全是空响应;…...

基于树莓派打造万能遥控器:从硬件选型到Web控制界面全解析

1. 项目概述:打造一个能“学习”的万能遥控器家里遥控器越来越多,电视、空调、风扇、灯带……每个设备都配一个,找起来麻烦,用起来也乱。市面上所谓的“万能遥控器”其实并不万能,它内置的码库有限,很多小众…...

掌握Umi-OCR:5分钟上手开源免费离线文字识别工具

掌握Umi-OCR:5分钟上手开源免费离线文字识别工具 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。…...

机器学习的最佳实践:这7个原则让你的模型更稳定

对于软件测试从业者而言,机器学习技术正在快速融入测试流程:从自动化测试用例生成、缺陷预测到测试环境异常检测,机器学习模型的稳定性直接决定了测试结果的可靠性——如果模型在测试环境波动、输入数据变化时性能骤降,不仅无法提…...

独立开发者利用taotoken模型广场为不同任务选择性价比最优模型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者利用taotoken模型广场为不同任务选择性价比最优模型 对于独立开发者而言,在有限的预算内高效完成多样化的开…...