SpringBoot文件上传和下载(二)
在上一篇文章《SpringBoot 文件上传和下载(一)》中,我们简绍了 HTTP 中关于 MIME 类型、HTTP Header Content-Type 和 Content-Disposition 的内容。
在本篇和后续篇章中正式开始学习一下 SpringBoot 中文件上传的知识,测试的场景分为三类:通过 HTML 页面上传文件通过 Jmeter、Postman、IDEA HTTP Client 工具上传通过 SpringBoot 服务上传
本篇学习如何通过 HTML 页面上传文件 创建 HTML 页面
我们先简单写一个用于上传文件的 HTML 页面,效果如下:
测试文件上传 创建 SpringBoot 微服务
创建 SpringBoot 微服务,创建用于测试文件上传的 Controller,如下所示:@Slf4j @RestController public class UploadFileController { @PostMapping("/test/upload/file") public String upload(@RequestParam String fileDesc, @RequestParam String expirationTime, @RequestParam MultipartFile fileContent) { log.info("文件上传信息:fileDesc={}; expirationTime={}; fileName={}", fileDesc, expirationTime, fileContent.getOriginalFilename()); return "SUCCESS"; } }
SpringBoot 配置使用默认,即端口号为 8080填写表单,发送请求
填写 HTML 页面表单如下所示:
点击 "提交信息" 按钮,发送请求到服务器,服务器输出日志结果如下所示:
文件上传信息:fileDesc=文件描述信息; expirationTime=2023-03-08; fileName=image-test-file.png结果分析
就上面的简单示例,我们分析一下文件是如何上传的,SpringBoot 服务是如何接收的: HTML 中 form 表单属性值注意点如果表单包括了文件上传,enctype 必须设置为 multipart/form-data ,在文章《SpringBoot 文件上传和下载(一)》中简绍 multipart/form-data 是一种复合 MIME 类型,可以在一次请求中,包含多种单一 MIME 类型。在本次示例中,包括两种 MIME 单一类型:① fileDesc 和 expirationTime 是文本类型(text/plain)② 文件对应的具体类型(image/jpeg)或字节流类型(application/octet-stream),具体在分析 multipart/form-data 请求报文时可以看到。如果设置 enctype 值,这 form method 必须为 post Controller 中的注意点在本次示例中,HTTP 请求中参数与方法同名参数映射采用的注解是 @RequestParam (对于 HTML 通过 form 表单发送简单参数可以使用,后面我们会看到使用 @RequestPart 注解,具体两个注解的区别后面简绍)。对于接收文件流,可以使用 Spring 提供的 org.springframework.web.multipart.MultipartFile 类,Spring 会将 multipart/form-data 请求中文件信息封装到 MultipartFile 类的实例中。查看 HTML 发送的请求报文
请求消息头中,我们可以看到 Content-Type 为 multipart/form-data; boundary=xxxxx ,其中 boundary 定义了请消息体中,每部分的分隔字符串请求消息体中,我们可以看到有与 HTML 三个字段相对应的三部分数据,各部分数据之间使用 boundary 字符串分隔。这三部分数据分为两类:① 第一部分和第二部分为普通字符串,Content-Disposition 值为 form-data; name="字段名",后面为空行和该字段对应的值,虽然没有设置 Content-Type,其实默认为 text/plain;② 第三部分为上传的文件信息,Content-Disposition 值为 form-data; name="字段名"; filename="文件名称",后面是空行和上传的文件数据(浏览器做了优化,不显示文件数据),Content-Type 值为 text/plain(因为我们测试的文件为 txt 文件)。(请求信息中就包括了 Content-Disposition 在 multipart/form-data 请求中的使用场景,在文章《SpringBoot 文件上传和下载(一)》有说明)
通过 HTTP 工具发送文件上传相关内容见下一篇文章,如果文章对大家有所帮助,欢迎点赞、关注、评论。
兔飞猛进开新局海南深海能源项目建设齐发力冲刺开门红央广网海口2月5日电消息(记者蔡文娟)新年伊始,海南各地的深海能源项目开足马力加快建设,全力冲刺开门红,为经济社会发展加油提气。1月30日,在深海一号二期工程建设现场,海洋石油98
邓超究竟做错了什么?他导演的电影中国乒乓票房竟不如动画片邓超导演的新电影中国乒乓之绝地反击在春节档上映,票房占比极其惨淡,竟然还比不上2部动画片!数据来自猫眼电影邓超为这部电影可谓用心艰苦,投入很多心血。他筹备该电影多年,该项目剧本打磨
稻妻万叶,叶天帝原神万叶是稻妻五星风系单手剑角色,定位为多功能辅助,万叶E技能有集聚怪扩散减抗削韧于一体优秀的机制,能够为队伍提供可观的元素增伤减抗,是泛用性最高的增伤辅助之一,手感优秀,推荐抽取
中兴通讯荣膺ICT中国2022案例征集及发布34项大奖日前,中国通信企业协会负责的ICT中国(2022)案例征集及发布活动获奖名单揭榜,旨在表彰ICT技术在垂直行业跨界应用新型智慧城市数字化转型建设方面的优秀案例等。中兴通讯凭借为全球
郑秀文嘉人二月刊封面穿红裙露香肩妖娆妩媚性感撩人头条创作挑战赛郑秀文嘉人二月刊封面曝光。哇哦,这动图也太帅了吧,同时身上布满纹身字母,又不失性感。首页封面上半身肉色紧身衣下身一袭黄色拖地裙,身姿旖旎曼妙,妖娆妩媚,裙上趴着一只是
双胞胎怒砸4000万整全身,原生脸已经很可爱了,为啥还要这么疯?双胞胎姐妹砸4000万整全身,日版By2来了?前几天冲浪时,羊刷到一对定位是整形博主的日本网红姐妹。在满格美颜滤镜的加持下,俩人共享同款大眼睛小翘鼻嘟嘟唇,配上凹凸有致的身材,俨然
有没有让你喜欢很久的句子(1)1。玫瑰骄傲多疑心里只有自己只想得到别人的赞赏和关注而小狐狸说请驯养我是在说我想为你舍己我想爱你陪安东尼度过漫长岁月2。让软香轻红嫁与春水,让蝴蝶死吻夏日最后一瓣玫瑰,让秋菊之冷艳
太阳的象征向日葵的花语是信念光辉高傲忠诚坚贞不渝,也代表着前程光明灿烂,不带有一丝阴霾的寓意。向日葵花,代表着勇敢地去追求自己想要的幸福。向日葵具有向光性,人们称它为太阳花,随太阳回绕的花。
坚持,只需要1个信念即使慢,驰而不息,纵令落后,纵令失败,但一定可以达到他所向往的目标。这是鲁迅先生在最先与最后中的一句话,朴素而现实。不是每个人都能在自己耕耘的领域里拔得头筹,也不是每个出发的人都能
元宵节饮食消费提示来了汤圆味虽美,勿贪多桂花香馅裹胡桃,江米如珠江水淘。元宵节是中国农历春节后第一个重要节日,除了看花灯猜灯谜等活动外,品尝形似雪球的汤圆(元宵)也为节日增添了更多的享受和乐趣,面对市面上琳琅满目的相关产
6种南方特有的蔬菜,很多北方人一种都不认识,你吃过几种?第一种盖菜我的同学第一次看到它的时候,以为它就是一种小白菜。确实在市面上销售的新鲜盖菜,看起来真的和小白菜十分相似。盖菜在南方十分的常见,基本上一年中除了夏季以外,其他的三个季节都