Spring Boot文件上传

5.3.1文件上传

开发Web应用时,文件上传是很常见的一个需求浏览器通过表单形式将文件以流的形式传递给服务器,服务器再对上传的数据解析处理。下面我们通过一个案例讲解如何使用SpringBoot实现文件上传,具体步骤如下。

1.编写文件上传的表单页面

在chapter05项目根路径下的templates 模板引擎文件夹下创建一个用来上传文件的upload.html模板页面,内容如下列代码所示。

<!DOCTYPE html> <html lang="en"xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <meta http-equiv="Content-Type" content=“text/html; charset=UTF-8”> <title>动态添加文件上传列表</title> <link th:href="@{/login/css/bootstrap.min.css}" rel="stylesheet"> <script th:src="@{/login/js/jquery.min.js}"></script> </head> <body> <div th:if="${uploadStatus}" style="color: red" th:text="${uploadStatus}"> 上传成功</div> <form th:action="@{/uploadFile}"method="post" enctype="multipart/form-data"> 上传文件:&nbsp;&nbsp;<input type="button"value="添加文件"onclick="add()"/> <div id-"file" style="margin-top:10px;"th:value="文件上传区域"> </div> <input id="submit" type="submit" value="上传" style="display: none;margin-top: 10px;"/> </form> <script type="text/javascript"> //动态添加上传按钮 function add(){ var innerdiv = "<div>"; innerdiv += "<input type='file' name='fileUpload' required='required'>"+ "<input type='button' value-'删除’ onclick='remove(this)'>"; innerdiv +="</div>"; $("#file").append(innerdiv); //打开上传按钮 $("#submit").css("display","block"); } //删除当前行<div> function remove (obj) { $(obj).parent().remove(); if($("#file div").length ==0){ $("#submit").css("display","none"); } } </script> </body> </html>

在上述代码中,第1318行代码的<form>标签用于创建上传文件的表单。第1937行是一段JavaScript脚本代码,用来处理用户动态添加或者移除上传输入框。
另外在文件5-11中第8行代码还引入了静态资源目录下的login/js中的jquery.min.js文件,因此,这里需要在项目resources/static/login 目录下创建一个 js 文件夹,并引入jquery.min.js文件。

2.在全局配置文件中添加文件上传的相关配置

在全局配置文件 application.properties 中添加文件上传的相关设置,内容如下列代码所示。

# thymeleaf 页面缓存设置(默认为true),开发中为方便调试应设置为false,上线稳定后应保持默认true spring.thymeleaf.cache=false # 配置国际化文件基础名 spring.messages.basename=i18n.login # 单个上传文件大小限制(默认为1MB) spring.servlet.multipart.max-file-size=10MB # 总上传文件大小限制(默认为10MB) spring.servlet.multipart.max-request-size=50MB

在上述代码中,在项目全局配置文application.properties已有配置的基础上,对文件上传过程中的上传大小进行了设置。其中,spring.servlet.multipart.max-file-size用来设置单个上传文件的大小限制,默认值为1MB,上述文件设置为10MB;spring.servlet.multipart.maxrequest-size 用来设置所有上传文件的大小限制,默认值为10MB,这里设置为50MB。如果上传文件的大小超出限制,会提示“FileUploadBaseyFileSizeLimitExceededException:The field fleUpload exceeds its maximum permitted size of 1048576 bytes"异常信息,因此开发者需要结合实际需求合理设置文件大小。

3.进行文件上传处理,实现文件上传功能

在之前创建的com.itheima.controller 包下创建一个管理文件上传下载的控制类FileController,用于实现文件上传功能,内容如下列代码所示。

import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.util.UUID; /** *文件管理控制类 */ @Controller public class FileController // 向文件上传页面跳转 @GetMapping("/toupload") public String toupload(){ return "upload"; } //文件上传管理 @PostMapping("/uploadFile") public String uploadFile (MultipartFile[] fileupload, Model model){ //默认文件上传成功,并返回状态信息 model.addattribute("uploadStatus",“上传成功!"); for (MultipartFile file : fileUpload) { // 获取文件名以及后级名 String fileName = file.getOriginalFilename(); // 重新生成文件名(根据具体情况生成对应文件名) fileName = UUID.randomUUID()+""+fileName; // 指定上传文件本地存储目录,不存在则需要提前创建 String dirPath = "F:/file/"; File filePath = new File(dirPath); if(!filePath.exists()){ filePath.mkdirs(); } try { file.transferTo(new File(dirPath+fileName)) } catch (Exception e) { e.printStackTrace(); //上传失败,返回失败信息 model.addAttribute("uploadstatus",,"上传失败:"+e.getMessage()); } } //携带上传状态信息回调到文件上传贞面 return "upload"; } }

文件5-13中,toUpload()方法用于处理路径为“/toUpload”的GET请求,并返回上传页面的路径。uploadFile()方法用于处理路径为“/uploadFile”的POST请求,如果文件上传成功,则会将上传的文件重命名并存储在“F:/ile/”目录。如果上传失败,则会提示上传失败的相关信息。需要注意的是,uploadFile()方法的参数fileUpload 的名称必须与上传页面中的name 值一致。

4.效果测试

启动项目,项目启动成功后,在浏览器上访问“http:/localhost-8080/oUpload",效果如图5-18所示。
单击图5-13所示窗口中的【添加文件】按钮,能够动态添加多个文件,效果如图5-14所示。


在图5-14所示的文件上传页面中,共添加了3个上传的文件,每个上传文件后方对应一个【删除】按钮,用于移除上传的文件。单击文件上传页面的【上传】按钮,如果存在未选择的文件,会提示“请选择一个文件”,否则选择好的上传文件会进行上传处理,效果如图5-15所示。
从图5-15可以看出,文件上传成功后页面会提示“上传成功”。为了验证文件上传效果,打开上传文件的存储目录“F:/ile/”,效果如图5-16所示。


从图5-16可以看出,在定制的上传文件存储目录“F:/ile/”下,出现了选择上传的3个不同类型的文件,同时文件名也根据设置进行了相应的修改,读者还可以打开每个文件查看具体的文件内容。

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

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

相关文章

STM32CubeMX安装包Mac版多用户权限配置指南

如何让团队共享一台 Mac 开发 STM32&#xff1f;STM32CubeMX 多用户权限配置实战 你有没有遇到过这样的场景&#xff1a;实验室只有一台性能强劲的 Mac&#xff0c;但好几个同学都要用它开发 STM32 项目。结果发现&#xff0c;只有当初安装 STM32CubeMX 的那个账号能正常打开…

HY-MT1.5为何选择4090D?单卡部署算力适配深度解析

HY-MT1.5为何选择4090D&#xff1f;单卡部署算力适配深度解析 随着大模型在翻译领域的持续突破&#xff0c;高效、低成本的推理部署成为落地关键。腾讯开源的混元翻译大模型HY-MT1.5系列&#xff0c;凭借其在多语言支持、翻译质量与边缘部署能力上的平衡&#xff0c;迅速引起业…

PDF-Extract-Kit备份恢复:数据处理的安全保障

PDF-Extract-Kit备份恢复&#xff1a;数据处理的安全保障 1. 引言 在现代文档数字化和智能信息提取的场景中&#xff0c;PDF 文件作为最常见、最通用的文档格式之一&#xff0c;承载着大量关键数据。然而&#xff0c;在使用自动化工具进行内容提取时&#xff0c;数据丢失、处…

HY-MT1.5-1.8B量化后精度保持技术揭秘

HY-MT1.5-1.8B量化后精度保持技术揭秘 随着多语言交流需求的不断增长&#xff0c;高效、精准且可部署于边缘设备的翻译模型成为AI落地的关键。腾讯开源的混元翻译大模型HY-MT1.5系列&#xff0c;凭借其在性能与效率之间的出色平衡&#xff0c;迅速引起业界关注。其中&#xff…

HY-MT1.5-1.8B边缘计算:车载系统实时翻译

HY-MT1.5-1.8B边缘计算&#xff1a;车载系统实时翻译 1. 引言 随着智能汽车和车联网技术的快速发展&#xff0c;多语言实时翻译已成为提升驾乘体验的重要功能。在跨国出行、跨境物流或国际会议接驳等场景中&#xff0c;驾驶员与乘客之间常面临语言沟通障碍。传统云端翻译方案…

腾讯HY-MT1.5应用:多语言客服系统搭建教程

腾讯HY-MT1.5应用&#xff1a;多语言客服系统搭建教程 在当今全球化业务快速发展的背景下&#xff0c;跨语言沟通已成为企业服务不可或缺的一环。尤其是在电商、金融、旅游等行业&#xff0c;客户支持需要覆盖多种语言&#xff0c;传统人工翻译成本高、响应慢&#xff0c;难以…

小模型大作为:HY-MT1.5-1.8B应用案例集锦

小模型大作为&#xff1a;HY-MT1.5-1.8B应用案例集锦 在AI翻译领域&#xff0c;大模型往往被视为性能保障的代名词。然而&#xff0c;随着边缘计算和实时交互需求的爆发式增长&#xff0c;轻量高效的小模型正成为落地场景中的“隐形冠军”。腾讯开源的混元翻译模型 1.5 版本&a…

从零实现GRBL移植:STM32开发实战案例

从零实现GRBL移植&#xff1a;STM32开发实战技术深度解析当CNC遇上ARM&#xff1a;为什么我们不再满足于AVR&#xff1f;你有没有遇到过这样的场景&#xff1f;一台基于Arduino的3D打印机在高速打印复杂模型时突然抖动&#xff0c;轨迹偏移&#xff1b;或者一台老式雕刻机执行长…

多语言网站本地化:HY-MT1.5实战案例

多语言网站本地化&#xff1a;HY-MT1.5实战案例 随着全球化业务的不断扩展&#xff0c;多语言网站的本地化需求日益增长。传统翻译服务在成本、延迟和定制化方面存在诸多限制&#xff0c;尤其在面对混合语言、专业术语或格式保留等复杂场景时表现不佳。腾讯开源的混元翻译大模…

openmv与stm32通信配置流程:系统学习第一步

OpenMV与STM32通信配置实战&#xff1a;从零搭建视觉控制系统的第一步你有没有遇到过这样的场景&#xff1f;想做一个能“看”的机器人——比如自动追踪小车、颜色分拣臂&#xff0c;或者手势识别装置。但当你试图在STM32上直接处理摄像头数据时&#xff0c;却发现帧率低得可怜…

LCD Image Converter入门必看:超详细版使用说明

从像素到代码&#xff1a;如何用 LCD Image Converter 高效打通嵌入式图形开发链路你有没有遇到过这样的场景&#xff1f;UI设计师甩来一个精美的PNG图标&#xff0c;你满怀信心地打开Keil&#xff0c;想把它“贴”到OLED屏幕上——结果发现&#xff0c;MCU根本不认识PNG。手动…

LED驱动电路项目应用:5V供电下的小型化设计

如何在5V供电下打造超小型LED驱动电路&#xff1f;实战设计全解析你有没有遇到过这样的场景&#xff1a;想给一款TWS耳机仓加个呼吸灯&#xff0c;却发现PCB上只剩下一小块空地&#xff1b;或者为智能手环设计背光时&#xff0c;发现传统电源方案发热严重、体积臃肿&#xff1f…

Spring Boot整合Redisson的两种方式

项目场景 Spring Boot整合Redisson的两种方式&#xff0c;方式一直接使用yml配置&#xff0c;方式二创建RedissonConfig配置类。前言redisson和redis区别&#xff1a; Redis是一个开源的内存数据库&#xff0c;支持多种数据类型&#xff0c;如字符串、哈希、列表、集合和有序集…

腾讯开源HY-MT1.5教程:上下文感知翻译实现

腾讯开源HY-MT1.5教程&#xff1a;上下文感知翻译实现 1. 引言 随着全球化进程的加速&#xff0c;高质量、多语言互译需求日益增长。传统翻译模型在面对混合语言、专业术语和上下文依赖等复杂场景时&#xff0c;往往表现乏力。为此&#xff0c;腾讯推出了开源翻译大模型 HY-M…

Keil5安装配置步骤详解:适合初学者的完整指南

从零开始搭建Keil5开发环境&#xff1a;嵌入式工程师的第一步 你是否刚接触单片机&#xff0c;面对一堆专业术语感到无从下手&#xff1f; “MDK”、“DFP”、“Arm Compiler”……这些词听起来像天书&#xff1f; 别担心&#xff0c;每个嵌入式大神都是从 安装Keil5 这一…

用BART微调医疗病历摘要更稳

&#x1f4dd; 博客主页&#xff1a;jaxzheng的CSDN主页 医疗病历摘要的稳定性革命&#xff1a;BART微调的鲁棒性优化策略目录医疗病历摘要的稳定性革命&#xff1a;BART微调的鲁棒性优化策略 引言&#xff1a;当精度不再是唯一标尺 问题深度剖析&#xff1a;稳定性为何是医疗摘…

腾讯HY-MT1.5 GPU配置指南:4090D性能调优

腾讯HY-MT1.5 GPU配置指南&#xff1a;4090D性能调优 1. 引言 随着多语言交流需求的快速增长&#xff0c;高质量、低延迟的机器翻译系统成为智能应用的核心组件。腾讯近期开源了其新一代混元翻译大模型 HY-MT1.5 系列&#xff0c;包含两个关键版本&#xff1a;HY-MT1.5-1.8B 和…

腾讯开源模型部署:HY-MT1.5高可用方案设计

腾讯开源模型部署&#xff1a;HY-MT1.5高可用方案设计 1. 引言&#xff1a;腾讯开源翻译大模型的演进与挑战 随着全球化进程加速&#xff0c;高质量、低延迟的机器翻译需求日益增长。传统云中心化翻译服务虽具备强大算力支撑&#xff0c;但在隐私保护、实时响应和边缘场景适应…

混元翻译1.5模型实战:多语言视频字幕生成

混元翻译1.5模型实战&#xff1a;多语言视频字幕生成 随着全球化内容消费的快速增长&#xff0c;多语言视频字幕的自动生成已成为跨文化传播、在线教育和流媒体平台的核心需求。传统翻译方案在面对复杂语境、混合语言表达以及实时性要求时&#xff0c;往往难以兼顾质量与效率。…

STM32在Keil4中的Flash烧录问题解析

深入Keil4烧录现场&#xff1a;STM32 Flash编程失败的根源与实战修复你有没有遇到过这样的场景&#xff1f;代码编译通过&#xff0c;调试器灯亮着&#xff0c;线也插好了——但一点“Download”&#xff0c;Keil弹出一句冷冰冰的提示&#xff1a;“Cortex-M3: No Algorithm Fo…