今天我们要说的这个话题很简单,不要问为啥,因为SpringBoot,哈哈。现在SpringBoot可以说人人都会用了,它的好处是显而易见的,大大的简化了配置,一起来看看吧。

我们分以下3种情况来谈这个话题。

第一种:上传单个文件

先来看一下form表单的设置,如下图所示:

单个文件的form

form表单要满足以下3点才行:

  1. form表单的method属性的值是POST
  2. form表单的enctype属性的值是multipart/form-data
  3. 上传文件的input的类型要是file

SpringMVC的设置如下:

SpringMVC接收单个文件

从图中可以看出服务端的写法非常简单,直接写Controller就行了。简单地说明一下,processUpload方法的参数要用MultipartFile接口来接收,这样SpringMVC才能接收到文件类型的输入项,之所以这么简单主要是因为SpringBoot已经为我们做好了所有的准备工作。当然了@RequestParam注解也可以换成@RequestPart,如图:

@RequestPart

我们这个这里返回了"redirect:/",用于重定向到根路径。

那么接下来我们就来看一下怎么上传多个文件。

第二种:不同的name上传多个文件

这种是由上传单一文件引申出来的,其实就是form表单上传多个数据项,只不过有多个file类型的input。这些多个不同的input通过name进行区分。如下图的3个input的name分别是file1、file2、file3:

多个不同的name

SpringMVC端就用多个参数来接收,很简单的,如下图:

接收多个file

这种场景属于上传多个图片,还不是通常意义上的批量上传,一个name代表一个种类,每个种类下含有一张图片。

第三种:同一个name上传多个文件

这种方式是把表单中的file类型的input设置成同一个name,这样SpringMVC就会把它们当做数组或列表来对待,form表单的写法如下,它们的name都是files:

同一个name

SpringMVC端使用MultipartFile列表来接收文件如下图,其中txt用于接收表单中的一个输入框:

List接收文件

如果换成数组接收的话就如同下图所示:

数组接收文件

这种场景才属于真正意义上的批量上传,比如同一个主题下的多个图片。

MultipartFile接口提供的方法

我们现在看一下MultipartFile接口的一些方法,理解这些方法对于编程还是很有好处的,可以快速提高我们的开发效率。

String getName();

获取参数在表单中的名称

String getOriginalFilename();

获取文件的原始名称,比如你上传的是apple.jpeg,那么这个方法返回的就是apple.jpeg。

String getContentType();

返回http请求的ContentType

boolean isEmpty();

判断上传的文件是否为空

long getSize();

返回文件的字节数形式的大小

byte[] getBytes();

返回文件的字节数组

InputStream getInputStream();

返回一个代表该文件的输入流,通常用于关闭流

void transferTo(File dest);

把接收到的文件写入到目的文件中,如果目的文件已经存在了则会先进行删除。用法如下:

file.transferTo(new File("/Users/i/apple.jpeg"));

void transferTo(Path dest)

作用同void transferTo(File dest);

总结

好了,今天的内容就这些了,主要和大家分享了基于SpringBoot的上传文件的方式,包括上传单个文件,上传多个不同name的文件和上传多个相同name的文件。另外还介绍了MultipartFile接口的常用功能。其中transferTo还是很实用的。

今天的内容就到这里了,小伙伴们有什么疑问可以在评论区留言哦。

form表单上传文件_SpringBoot中如何使用SpringMVC上传文件?相关推荐

  1. 前端_网页编程 Form表单与模板引擎(中)

    目录 ... ... (续上篇) 四.模板引擎的基本概念 1.定义 2. 优点 五.art-template模板引擎 1.art-template模板引擎介绍 2. art-template的安装 3 ...

  2. javascript构造可以上传文件的form表单(通过js修改enctype)

    在上传文件时,我们都知道需要在form表单中加上enctype="multipart/form-data".而在开发过程中,也有可能遇到需要用javascripts构造form表单 ...

  3. android中怎么保存checkbox中的checked属性_第二十四天HTML中的form表单

    form表单 用于收集用户信息,如:登录.注册等场景:所有要提交的数据都必须放在form标签中 action:提交地址.动作,与input标签中typy标签的submit属性相关联. ,提交地址是ac ...

  4. 前端_网页编程 Form表单与模板引擎(上)

    目录 一.form表单的基本使用 1. 什么是表单? 2. 表单的组成部分 3. < form>标签的基本属性 3.1 action 3.2 target 3.3 method 3.4 e ...

  5. html表单的常用属性有哪些,html/form表单常用属性认识

    1.form表单常用属性练习 .form1 { margin: auto; height: 900px; width: 500px; text-align: center; line-height: ...

  6. html post和get请求,form表单的GET和POST请求

    是HTML标签中比较复杂的标签之一,在学习中我注意到它与HTTP协议有关联,所以我做了一些总结. method="GET" 首先新建一个包含form表单的html文件,例如inde ...

  7. 前端_网页编程 Form表单与模板引擎(下)

    目录 续上一篇 6. 模板引擎的实现原理 6.1 正则与字符串操作 6.1.1 基本语法 6.1.2 分组 6.1.3 字符串的replace函数 6.1.4 多次replace 6.1.5 使用wh ...

  8. 表单ajax提交插件,jQuery Form 表单提交插件-----ajaxSubmit() 的应用

    Form Plugin API 里提供了很多有用的方法可以让你轻松的处理表单里的数据和表单的提交过程. 测试环境:部署到Tomcat中的web项目. 一.ajaxSubmit() 介绍 立即通过AJA ...

  9. 用自定义的form表单对jqgrid数据进行检索查询

    资料如下:http://stackoverflow.com/questions/5819071/jqgrid-custom-form-to-search-data-select-box-problem ...

最新文章

  1. 【青少年编程(第24周)】Python-Turtle组队学习结营!
  2. RxPermission原理解析
  3. 卸载vuecli3_卸载vue2.0并升级vue_cli3.0的实例讲解
  4. arduino点阵声音频谱_Arduino基础入门篇19—点阵屏
  5. SAP License:求职最受欢迎的十大技能
  6. linux查看log日志在哪,如何查看linux的系统log日志
  7. android 自定义园动画,如何在Android中绘制一个带有动画的圆
  8. Python 字典或JSON模拟数据库的增删改查
  9. pypi.python.org_https://pypi.python.org/pypi/ssh
  10. win32API中文参考手册
  11. 1一10到时的英文单词_1到10的英语单词
  12. Python 安装openGL教程
  13. 【预防流感】冬春之交推荐吃香菜
  14. 使用微信实现查卷返利机器人功能
  15. 计算机二级可以用笔记本电脑学吗,计算机二级可以自学好过吗
  16. 【NVMe2.0b 10】Controller Shutdown 与 NVM Subsystem Shutdown
  17. Scala编程学习之三-运算符篇
  18. 如何在oracle官网下载ojdbc8,想不想在maven里直接下载ojdbc这个jar?
  19. 26.K-均值算法的优化目标、随机初始化、聚类数的选择
  20. 日常英语单词学习-Stages of Life

热门文章

  1. SSD论文阅读(Wei Liu——【ECCV2016】SSD Single Shot MultiBox Detector)
  2. [目标检测] Faster R-CNN 深入理解 改进方法汇总
  3. PhotoShop常用的功能汇总
  4. 关于磁盘,磁柱,磁头,扇区的概念
  5. 超简单的视频对象提取程序
  6. 飞鹤乳业CIO:移动化让企业品牌和消费者紧密连接
  7. Tasker文件夹说明
  8. 【JAVASCRIPT】处理剪切板
  9. 最近开始接触网络电话
  10. ubuntu下Tensorflow 报错: ImportError: No module named 'matplotlib'