浅识MultipartFile

  • 一、概述
  • 二、对MultipartFile初步理解
    • 1.MultipartFile类的注释说明
    • 2.MultipartFile常用方法解析
  • 三、MultipartFile的一些使用技巧

一、概述

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

二、对MultipartFile初步理解

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

1.MultipartFile类的注释说明

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

图中翻译过来是:
1.MultipartFile一种可以接收使用多种请求方式来进行上传文件的代表形式。(如果使用spring框架来实现项目中的文件上传功能,则MultipartFile是最合适的选择,而这里提到的多种请求方式则可以通俗理解为以表单的形式提交)。
2.这个文件内容可以存储到内存中或者存储在磁盘的临时位置上。
3.无论发生哪种情况,用户都可以自由地拷贝文件内容到session存储中,或者以一种永久存储的形式进行存储。
4.这种临时性的存储在请求结束之后将会被清除掉。

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所示:

三、MultipartFile的一些使用技巧

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

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

初步理解MultipartFile[文件上传]相关推荐

  1. 使用SpringMVC 的MultipartFile文件上传时参数获取的一个坑

    2019独角兽企业重金招聘Python工程师标准>>> 最近在做文件上传,看到SPRINGMVC以做了一些封装,就打算以使用它来做上传.但马我就遇到了接收不到文件参数的问题.都是按照 ...

  2. MultipartFile文件上传

    一.配置文件: SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file.在springmvc.xml中进 ...

  3. WebMvc中MultipartFile文件上传

    /**          * 文件上传总结:          * 1.标注注解 @RequestPart(name = "file1") MultipartFile multip ...

  4. MultipartFile 文件上传

    Spring Boot + Html + FormDate 实现参数和文件同时提交 前台页面 + JS <form><input type="file" name ...

  5. multipart/form-data与httpclient文件上传

    写在前面:本文讨论的内容都是基于java相关技术栈. 文件上传无论是在传统的基于html的web系统开发,还是目前主流的移动app开发,都是一个比较常见的功能需求.例如:web oa系统,可能会涉及到 ...

  6. 文件上传漏洞——DVWA练习

    前言:文件上传漏洞是很常见的漏洞,也非常有趣,接下来就在DVWA靶场中边学边练. 文件上传漏洞: 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向 ...

  7. html文件上传删除,文件上传以及删除文件方法

    文件上传公共方法 1.[代码][Java]代码 import java.io.File; import java.util.Date; import javax.servlet.http.HttpSe ...

  8. Html5+NodeJS——拖拽多个文件上传到服务器

    实现多文件拖拽上传的简易Node项目,可以在github上下载,你可以先下载下来:https://github.com/Johnharvy/upLoadFiles/. 解开下载下的zip格式包,建议用 ...

  9. SpringBoot(FastDFS文件上传)

    FastDFS 相关概念 FastDFS 服务端有三个⻆色:跟踪服务器(Tracker Server).存储服务器(Storage Server)和客户端(Client). Tracker Serve ...

最新文章

  1. 9种蔬菜吃不对胜似砒霜
  2. Html----编写
  3. 边缘计算如何实现海量IoT数据就地处理
  4. Qt界面设计器中的界面预览与程序运行时界面不一样
  5. 学php还是golang,学swoole还是golang
  6. mybatis 映射成多个list_SSM:Mybatis架构与原理
  7. linux系统中存放用户账号信息的文件是,信息安全技术题库:Linux系统中,用户登录密码的hash是存放在()文件中的。...
  8. 中国网站备案制度——祸国殃民
  9. 计算机二级vb上机操作题库,全国计算机二级VB上机题库(题+答案)word版
  10. 西门子s7-200解密软件下载_西门子S7200软件工具——调试应用程序
  11. 论文阅读:Beyond Synthetic Noise: Deep Learning on Controlled Noisy Labels(2017ICML)
  12. 如涵定格3.4美元退市:投资人“三折”下车,成败均系张大奕一身
  13. 公司被收购以后,我怎么办?
  14. HTML5基础:布局和标签
  15. v-chart 自定义显示格式
  16. 无刷直流电机控制系统matlab,基于MATLAB的无刷直流电动机控制系统仿真
  17. recurdyn matlab版本,基于Matlab与RecurDyn的电传动履带车辆的联合仿真
  18. GAN项目实战 使用CycleGAN将苹果变成橙子Pytorch版
  19. 【Proteus仿真】51单片机汇编实现DS18B20+LCD1602显示
  20. macOS中比较好的SVN客户端软件:SnailSVNLite

热门文章

  1. 数学与计算机科学国际研讨会怎么样,“计算数学与科学计算国际研讨会——暨纪念冯康先生百年华诞”(2020年8月17日-8月20日)...
  2. 虎牙直播自动弹幕机器人
  3. 【算法】MVP 争夺战
  4. Latex 字体整理
  5. 通往财富自由之路详细笔记(12)
  6. 抖音账号矩阵系统源码开发之——视频发布功能开发
  7. Python最强IDE(PyCharm)安装教程
  8. ChinaSkills-网络系统管理赛项(计算机网络应用赛项改革)
  9. Java怎么打开TMX,TMX 的 Java 类库 Otter TMX
  10. android打不开ios分享微博,iOS集成新浪微博登录分享遇到的一些问题