深入理解 MultipartFile 处理文件

news2024/11/28 16:53:16

  在Java中处理文件向来是一种不是很方便的操作,然后随着Spring框架的崛起,使用Spring框架中的MultipartFile来处理文件也是件很方便的事了,今天就为大家带来剖析MultipartFile的神秘面纱。MultipartFile本身并没有很复杂的结构,也正是他强力封装了很多便捷的api才引来很多人的使用。

一、概述

    MultipartFile为org.springframework.web.mutipart包下的一个类,也就是说如果想使用MultipartFile这个类就必须引入spring框架,换句话说,如果想在项目中使用MultipartFile这个类,那么项目必须要使用spring框架才可以,否则无法引入这个类。MultipartFile翻译成中文来讲就是“多组件的文档”,不用太在乎他的中文含义,一般来讲使用MultipartFile这个类主要是来实现以表单的形式进行文件上传功能。

二、理解什么是MultipartFile

    要想真正理解什么是MultipartFile,我们就需要从源码角度进行分析和理解。接下来我将一步一步对MultipartFile进行源码解读,这可以使得我们更系统的理解MultipartFile。

1、MultipartFile类的注释说明

      MultipartFile类的注释说明截图如下图1.1所示:

      

 

                                                                                     图1.1 MultipartFile注释说明

      第一句:一种可以接收使用多种请求方式来进行上传文件的代表形式。也就是说,如果你想用spring框架来实现项目中的文件上传功能,则MultipartFile可能是最合适的选择,而这里提到的多种请求方式则可以通俗理解为以表单的形式提交。

      第二句:这个文件内容可以存储到内存中或者存储在磁盘的临时位置上。

      第三句:无论发生哪种情况,用户都可以自由地拷贝文件内容到session存储中,或者以一种永久存储的形式进行存储,如果有需要的话。

      第四句:这种临时性的存储在请求结束之后将会被清除掉。

2、MultipartFile常用方法解析

      首先MultipartFile是一个接口,并继承自InputStreamSource,且在InputStreamSource接口中封装了getInputStream方法,该方法的返回类型为InputStream类型,这也就是为什么MultipartFile文件可以转换为输入流。通过以下代码即可将MultipartFile格式的文件转换为输入流。

multipartFile.getInputStream();
 

  (1)、getName方法

          getName方法获取的是前后端约定的传入文件的参数的名称,在SpringBoot后台中则是通过@Param("uploadFile") 注解定义的内容。值得一提的是,我们来看一下该方法的注释,如下图2.1所示:

                            

                                                                              图2.1 getName方法源码截图

        从上图的return中可以看出,返回的name值从来不是null或者空,也就是说如果使用MultipartFile来接收文件,那么@Param("uploadFile")定义的接收文件的名称则必不可少,这样才能接收到文件,如果没有定义@Param("uploadFile"),则接收不到文件。

 (2)、getOriginalFileName方法 

         getOriginalFileName方法获取的是文件的完整名称,包括文件名称+文件拓展名。

 (3)、getContentType方法 

         getContentType方法获取的是文件的类型,注意是文件的类型,不是文件的拓展名。

 (4)、isEmpty方法 

         isEmpty方法用来判断传入的文件是否为空,如果为空则表示没有传入任何文件。

 (5)、getSize方法 

         getSize方法用来获取文件的大小,单位是字节。

 (6)、getBytes方法 

         getBytes方法用来将文件转换成一种字节数组的方式进行传输,会抛出IOException异常。

 (7)、getInputStream方法 

         getInputStream方法用来将文件转换成输入流的形式来传输文件,会抛出IOException异常。

 (8)、transferTo方法 

         transferTo方法用来将接收文件传输到给定目标路径,会抛出IOException、IllegalStateException异常。该方法在实际项目开发中使用较少。

         我们以上传一张图片文件为例,分别来看一下调用不同方法所获取到的数据,如下图2.2所示:

                                                                 

                                                             图2.2 MultipartFile常用方法获取数据打印结果

三、MultipartFile的一些使用技巧

    (1)我们在使用MultipartFile作为参数传递的时候,可以将MultipartFile声明为一个数组,这样就能支持多文件传输,如果只需要传输一个文件,则去掉数组就好了。

    (2)可以根据MultipartFile的getSize方法来获取到传输文件的大小,这样就能限定传输过来的文件的大小了。

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

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

相关文章

DBCO点击试剂特点:DBCO-PEG12-OH,DBCO-PEG12-Tos,DBCO-TCO

DBCO 试剂是一类点击化学标记试剂,含有非常活泼的 DBCO((二苯并环辛炔)基团,DBCO 试剂可以通过无铜点击化学与叠氮化物标记的分子或生物分子发生反应。DBCO 点击化学可以在水性缓冲液中运行,也可以在有机溶…

pyinstaller打包python脚本为exe可执行文件实例:错误排查小脚本

根据TIOBE全球编程语言排名,python是目前世界排名第一的编程语言。考虑到代码及数据的保密性,以及其他人电脑上可能没有装python环境,因此我们需要将自己编写的python脚本打包成exe格式的可执行文件发送给其他人使用。小编推荐一款名为pyinst…

Spring Boot 2.7.5 整合 Swagger 3 实现可交互的后端接口文档

文章目录前言集成访问代码参考文献前言 问: 什么是 OpenAPI? 答: OpenAPI 规范(OAS),是定义一个标准的、与具体编程语言无关的RESTful API的规范。OpenAPI 规范使得人类和计算机都能在“不接触任何程序源代码和文档、不监控网络通信”的情…

智能音箱中采用的数字音频功放

智能改变生活,随高科技的发展智能科技已经融入我们生活当中,智能家居和IOT物联网的发展越来越深入人心,从手机到家电在到家居因为智能化而都在慢慢的改变;智能音响,足不出户,看尽大千世界;一屋一…

《RO 仙境传说》 Game Jam 获奖名单公布!

一睹获胜者的作品吧~ 《RO 仙境传说》Game Jam 已经圆满结束!许多社区成员都创造了非常棒的体验。 祝贺所有获奖者,并感谢每一位参与并分享了想法的用户。 接下来将公布综合优秀奖、最佳创意奖和最佳设计奖的得主!获奖名单是由 Th…

第 21 章 InnoDB Cluster

第21章 InnoDB Cluster 文章目录第21章 InnoDB Cluster本章介绍 MySQL InnoDB Cluster ,它整合了 MySQL 多项技术,使您能够部署和管理 MySQL 的完整集成的高可用解决方案。本内容是 InnoDB Cluster 的高级概述,有关完整文档,请参阅…

面试了个阿里P7程序员,他让我见识到什么才是“精通高并发与调优”

蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力、培训、出国、大公司的经历,还有很多很好的朋友。但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员,…

二叉树操作集锦(递归遍历,非递归遍历,求深度,结点个数,完全二叉树等)

二叉树操作集锦(递归遍历,非递归遍历,求深度) 二叉树操作集锦(递归遍历,非递归遍历,求深度)一、二叉树操作集锦1.1 二叉树定义1.2 二叉树创建1.3 二叉树遍历1.3.1 二叉树递归遍历1.3…

【JAVA程序设计】基于SSM的电影院在线购票系统-沙箱支付

基于SSM的电影院在线购票系统-沙箱支付项目获取项目简介开发环境项目技术功能结构运行截图项目获取 获取方式(点击下载):是云猿实战 项目经过多人测试运行,可以确保100%成功运行。 项目简介 本项目是基于SSM的影院购票系统,本项…

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板

偶然心血来潮,想要做一个音乐可视化的系列专题。这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,…

线程,互斥锁,临界区

目录1.线程概念2.windows的线程和linux的线程的区别3虚拟地址到地址空间的转换4.线程优缺点1.优点2.缺点5.进程控制1.创建线程2.线程出现异常了怎么办?进程健壮性问题3.join的第二参数如何理解4.线程终止时6.如果理解pthread_t7.三个概念6.互斥锁1.关于临界区的一点…

【设计模式】 - 结构型模式 - 装饰者模式

装饰者模式 概述 指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。 装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为 结构 Component:可以是接…

膜拜,Alibaba最新发布SprinBoot:进阶原理实战与面试题分析指南

为什么要写这本书? 我们知道,Spring Boot是一个集成性的开源框架,内部整合了很多第三方组件和框架。这些组件和框架应用如此之广泛,以至于大家反而往往对如何更好地使用Spring Boot自身的功能特性并不是很重视。事实上&#xff0…

CubeMX+VSCode+Ozone的STM32开发工作流(一)背景知识介绍

neozng1hnu.edu.cn TODO:1. 添加一键编译启用ozone调试/一键编译下载的脚本,使得整个进一步流程自动化2. 增加更多的背景知识介绍3. 增加VSCode下RTT viewer的支持和一键下载(不进入调试)的支持前言 了解过嵌入式开发的你一定接触过Keil,这款…

[附源码]java毕业设计校园求职与招聘系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

单克隆抗体WuT9/甘草次酸-氟尿嘧啶偶联顺铂/RGD肽修饰聚谷氨酸-顺铂复合物的制备

小编下面整理了单克隆抗体WuT9/甘草次酸-氟尿嘧啶偶联顺铂/RGD肽修饰聚谷氨酸-顺铂复合物的制备,来看! RGD肽修饰聚谷氨酸-顺铂复合物制备: 以改性聚谷氨酸侧链羧基与顺铂稳定配位,再与RGD肽进行化学偶联,得到修饰后的药物复合物,对复合物的…

【Java基础】HashMap扩容 | CopyOnWriteArrayList 的底层原理 | 字节码 | Java 异常体系

1. HashMap的扩容机制 JDK 1.7 扩容是针对数组进行扩容,链表是不需要进行扩容的。扩容时先生成原来数组两倍大小的新数组,在把原来老数组上的链表上的元素转移过去。具体在转移链表中元素的步骤是:取每个元素的 key,基于新数组长…

Java反射学习笔记--使用示例

简介 反射是Java编程语言中的一个特性。它允许执行的Java程序 检查 或 操作 自身,并操作程序的内部属性。例如,Java类可以获取其所有成员的名称并显示它们。 反射的一个具体用途是在JavaBeans中,软件组件可以通过一个构建工具进行可视化操作…

specCPU 2006 备忘

前言 首先 specCPU是收费的,好像是800还是1000$,缴费了才有软件分发给你,但是个人或者国内某些项目测试都是百度或者找整机,CPU或者操作系统厂家给。 specCPU和其他性能测试工具类似,基本上都是在被测试机器现场编译测试程序&am…

C++11主要新增使用语法介绍

目录 1. C11简介 2. 统一的列表初始化 2.1 {}初始化 2.2 std::initializer_list 3. 声明 3.1 auto 3.2 decltype 3.3 nullptr 4. STL中一些变化 5. 右值引用和移动构造/赋值 5. 1 左值引用和右值引用 5.2 右值引用使用场景和意义 5.3 完美转发…