SpringMVC学习笔记【part5】本地文件上传

SpringMVC上传文件并保存到本地代码实例 主要介绍了SpringMVC上传文件并保存到本地代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 立即下载

SpringMVC 学习笔记 Part5

1. 文件上传的原理

本小节将回顾 JavaWeb 传统的文件上传方式和学习更为方便的 SpringMVC 提供的文件上传组件。首先先来回顾一下文件上传的一些前置知识。

  1. form 表单的 enctype 取值必须是:multipart/form-data (默认值是:application/x-www-form-urlencoded) ,enctype 是表单请求正文的类型,multipart属性表示请求正文将被分成好几个部分。
  2. form 表单的 method 属性取值必须是 Post 。
  3. form 表单中需提供一个文件选择域< input type=“file” />
<form action="user/fileupload" method="post" enctype="multipart/form-data"> 
    选择文件:<input type="file" name="upload"/><br/> 
    <input type="submit" value="上传文件"/> 
</form>

注:当 form 表单的 enctype 取值不是默认值后,request.getParameter()将失效。

当 form 表单的 enctype 取值为 ”application/x-www-form-urlencoded” 时,form 表单的正文内容是:key=value&key=value&key=value 。

当 form 表单的 enctype 取值为 “Mutilpart/form-data” 时,请求正文内容就变成每一部分都是 MIME 类型描述的正文:分解符、协议头、协议的正文以及协议的类型(MIME类型)。

2. 传统的文件上传

首先先导入文件上传相关的坐标。

<dependency> 
    <groupId>commons-fileupload</groupId> 
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version> 
</dependency>
<dependency> 
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

编写文件上传的控制器方法。

@RequestMapping(value="/myUpload")
public String myUpload(HttpServletRequest request) throws Exception { 
    // 先获取到要上传的文件目录 
    String path = request.getSession().getServletContext().getRealPath("/uploads"); 
    // 创建File对象,一会向该路径下上传文件 
    File file = new File(path); 
    // 判断路径是否存在,如果不存在,创建该路径 
    if(!file.exists()) {
        file.mkdirs(); 
    }
    
    // 创建磁盘文件项工厂,再使用工厂创建文件上传解析器
    DiskFileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload fileUpload = new ServletFileUpload(factory); 
    // 解析request对象,得到了文件项的集合
    List<FileItem> items = fileUpload.parseRequest(request); 
    
    // 遍历 
    for (FileItem item : items) { 
        // 判断文件项是普通字段,还是上传的文件 
        if(item.isFormField()) { 
            //说明是普通表单项
        }else { 
            // 说明是上传文件项
            // 获取到上传文件的名称 
            String filename = item.getName();
            // 把文件的名称唯一化 
            String uuid = UUID.randomUUID().toString().replaceAll("-", ""); 
            filename = uuid+"_"+filename;
            // 上传文件 
            item.write(new File(file, filename)); 
            // 删除临时文件(当不超过10kb时,上传完服务器会自动清除。而当超过10kb时,上传完文件将会有临时文件,需要自行清除)
            item.delete(); 
        } 
    }
    return "success"; 
}

3. SpringMVC框架的文件上传

首先简述一下SpringMVC框架的文件上传的基本原理:首先需要有一个框架为我们提供的 MultipartFile 类对象。当我们点击 submit 提交后,request 将会被发送到前端控制器中,前端控制器将 request 送入配置文件解析器进行解析,解析完成会返回一个 upload文件上传项 给前端控制器,前端控制器再把这个 upload 送到 Controller 里我们编写的方法里。

MultipartFile 类对象如何创建也非常简单。第一步先在 xml 里配置创建进 IoC 容器里,其次只要加入我们编写文件上传的控制器方法中的形参里就好啦。

第一步:创建CommonsMultipartResolver进IoC容器。

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10485760"/>
</bean>

注意此处CommonsMultipartResolver的bean创建,id属性值必须为multipartResolver,为其他的将会造成HTTP 500错误。

第二步:编写文件上传的控制器方法中加入MultipartFile的形参,并编写文件上传代码。

@RequestMapping("myUpload")
public String myUpload(HttpServletRequest request,MultipartFile upload) throws Exception {
    // 先获取到要上传的文件目录
    String path = request.getSession().getServletContext().getRealPath("/uploads");
    // 创建File对象,一会向该路径下上传文件
    File file = new File(path);
    // 判断路径是否存在,如果不存在,创建该路径
    if (!file.exists()) {
        file.mkdirs();
    }

    // upload是被springmvc解析完成的,是可以直接使用的上传文件项
    // 改动1.获取到上传文件的名称
    String filename = upload.getOriginalFilename();
    // 把文件的名称唯一化
    String uuid = UUID.randomUUID().toString().replaceAll("-", "");
    filename = uuid + "_" + filename;
    // 改动2.完成文件上传
    upload.transferTo(new File(path,filename));

    return "success";
}

与传统的文件上传方式相比,共简化了两处代码,也省去了遍历操作。

【VS2017】“LNK1104 cannot open file ‘python39_d.lib‘ “ 记录一下编译调用了python代码的C语言源程序时遇到的问题 版本:以python3.9.1为例 先确保你安装了python的debug版本,如果没有,用对应版本安装包可以修改已经安装的python,如图。 选择 “Modify” 选择next 确保最后一项勾选,然后install。 光安装了还不够,需要配置一下C语言编译器。 以VS2017为例: 将python37_d.lib(在安装目录下的libs文件夹里有python39_d.lib)所在文件夹的路径添加到库目录里面,右键你的解决方案,选. 阅读详情

相关推荐

STM32——IIC(I2C)中断与DMA通信实战解析

本文深入解析STM32的IIC(I2C)通信中断与DMA实战应用。通过对比轮询方式的低效,详细介绍中断模式和DMA模式的实现原理、状态机编程技巧及性能优化策略,并结合SHT30传感器案例展示如何高效读取数据,显著提升系统响应速度和CPU利用率。

week9的博客 808

SpringMVC如何通过服务器将文件上传到本地文件夹

主要是在Controller层进行编写 前端文件 第一种方式(有缺陷) 文件上传的步骤 1、写明文件上传的位置 String path = request.getServletContext().getRealPath("/") + "/upload/"; 2、写输入输出流 //path:是拷贝的路径 //file.getOriginalFilename()是获取文件的名字 InputStream is = file.getInputStream(); OutputStream os = new

编程的牛牛 637

汇川EASY521 PLC实战指南:从硬件选型到程序架构与故障排查

可编程逻辑控制器(PLC)是工业自动化系统的核心大脑,其工作原理基于循环扫描机制,持续读取输入、执行用户程序并更新输出。这种确定性控制方式,使其在逻辑控制、顺序控制和运动控制中具有不可替代的技术价值,广泛应用于机械设备、生产线和过程控制等场景。对于汇川EASY521这类紧凑型高性能PLC,其核心优势在于集成了运动控制与丰富通讯接口,为中小型设备提供了高性价比的一站式解决方案。在实际应用中,工程师常需处理如“汇川sv660n”伺服驱动器的集成调试,或利用“hslcommunication”等开源库实现C#上位

weixin_42525264的博客 743

Spring MVC文件上传与多文件上传

文件上传客户端所需的三要素: 表单项type=“file” 表单的提交方式是post 表单的enctype属性是多部分表单形式,及enctype=“multipart/form-data” 这里的“multipart/form-data”属性值表示该表单使用multipart请求提交 一、multipart请求 传统的表单提交enctype使用的是默认的属性值“application/x-www-form-urlencoded”,表单的正文内容格式是:key=value&key=value&am

初栀的博客 1315

树莓派CSI/DSI二合一接口深度玩法:同时驱动MIPI摄像头和屏幕的配置秘籍

本文详细解析了树莓派5上CSI/DSI二合一接口的深度玩法,提供了同时驱动MIPI摄像头和屏幕的完整配置秘籍。从硬件连接到软件设置,包括config.txt的优化配置,帮助用户充分利用树莓派5的双多功能接口,实现高效的双设备工作模式。

weixin_30687051的博客 575

高效IT运维报告编写指南:实战经验与模板分享

本文提供了一份全面的IT运维报告编写指南,涵盖实战经验与实用模板分享。文章详细解析了高效运维报告的核心要素,包括结构设计、数据收集自动化和可视化技巧,并提供了月度报告和故障分析报告模板。通过自动化工具和写作技巧,帮助团队提升报告质量,支持决策和问题追踪。

u5v6w7的博客 930

SpringMVC实现多文件上传

客户端三要素 设置提交方式为post: method=“post” enctype=“multipart/form-data” type=“file” maven坐标 <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.2</ve

Fhakjfksakln的博客 441

SPSS(二)SPSS实现多因素方差分析模型(图文教程+数据集)

SPSS(二)SPSS实现多因素方差分析模型 单因素方差分析上一篇博客https://blog.youkuaiyun.com/LuYi_WeiLin/article/details/89917656已经介绍完毕 这篇博客我们主要来学习多因素方差分析 多因素方差分析,就是同时考虑若干个控制因素的情况下,分别分析它们的改变是否造成观察变量的显著变动 (多个自变量,一个因变量)自变量类型以分类变量为主也可以...

可乐联盟 6万+

SpringMVC异步实现多图片上传至本地服务器

今天又闲了一天,没事总结了一下SpringMVC异步上传的例子。。。前段时间写一个上传到oss的例子,今天写一个上传到本地猫的例子把。。。。准备工作由于项目使用了maven,在这里先说下使用jar。1.pom依赖 &lt;dependency&gt; &lt;groupId&gt;commons-io&lt;/groupId&gt; &lt;artifactId&gt;commons-...

搬砖工 1692

单细胞测序数据读取实战指南:从入门到精通

本文提供了单细胞测序数据读取的实战指南,涵盖从标准10X Genomics格式到通用表达矩阵及RDS文件的读取方法。文章重点解析了数据读取的核心步骤、常见问题解决方案及进阶技巧,旨在帮助用户夯实数据分析基础,确保后续分析流程的准确性。

weixin_29095587的博客 460

Python 爬虫实战:爬虫与 ECharts 结合 —— 前端可视化展示

本文介绍了爬虫技术与ECharts可视化结合的完整实现流程。首先使用Python爬取京东商品数据(价格、评价数等),通过BeautifulSoup解析和pandas处理转换为JSON格式。然后构建前端页面,利用ECharts实现价格分布柱状图、价格-评价数散点图和店铺占比饼图三种可视化效果。文章详细解析了爬虫数据提取、格式转换和前端图表配置等关键技术点,并提供了完整的代码示例。最后提出了基于API接口、数据库存储等扩展方向,为数据采集到可视化展示提供了完整的解决方案。

2503_91057718的博客 633

上传文件如何从part对象中检索上传文件的文件名?_文件上传的方式

问题:JavaWeb中实现文件上传的方式有哪些?上回我们说了下文件下载的方式有哪些,这次我们从不同的环境下简单来说说文件上传的方式有哪些。文件上传的方式Servlet2.5 方式Servlet3.0 方式SpringMVC 方式案例实操Servlet2.5 方式文件上传涉及到前台页面的编写和后台服务器端代码的编写,前台发送文件,后台接收并保存文件,这才是一个完整的文件上传。1) 前台页面在做文件上...

weixin_36285931的博客 1920

6、 实时家禽健康识别与疾病检测系统的深入解析

本文深入解析了一种基于物联网的实时家禽健康识别与疾病检测系统,结合图像分析和音频分析技术,能够有效识别病鸡并防止疾病传播。文章详细介绍了系统的测试环境、数据采集与预处理方法、图像与音频分析流程,并对系统性能进行了全面评估。最后提出了未来改进方向,包括多模态融合、深度学习应用及实时性优化等。

weixin_28840811的博客 187

SpringBoot学习5.8-SpringMVC-文件上传

1.配置文件 #是否启用springmvc多分部上传 spring.servlet.multipart.enabled=true # 指定默认上传的文件夹 spring.servlet.multipart.location=F:/springbootlearn # 限制单个文件最大大小(bytes),这里设置为100KB spring.servlet.multipart.max-file-si...

echo的博客 258

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SpringMVC学习笔记【part6】跨服务器文件上传

SpringMVC 学习笔记 Part5 1. 服务器划分的目的 在实际开发中,我们会有很多处理不同功能的服务器。例如: 应用服务器:负责部署我们的应用。 数据库服务器:运行我们的数据库。 缓存和消息服务器:负责处理大并发访问的缓存和消息。 文件服务器:负责存储用户上传文件的服务器。 分服务器处理的目的是让服务器各司其职,从而提高我们项目的运行效率。 2. 跨服务器文件上传 前置工作: 我们需要在文件接受服务器的 apache-tomcat-8.5.69\conf 目录下找到 web.

Parker_cpp的博客 630

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

黑马就业班——SpringMVC框架:part2

1、响应数据和结果视图 1.1 Controller控制器类方法的返回值类型   参考项目:springmvc_day02_01_response 。   controller控制器类的方法可以返回:字符串、void、ModelAndView对象   注意: 1、success.jsp标签记得加:isELIgnored="false"属性,否则在jsp文件无法使用EL表达式! 如:<%@...

LKJgdut的博客 343

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SpringMVC实现文件上传

使用JavaConfig方式实现Spring MVC上传文件 在项目的初始化类继承org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer抽象类并且实现customizeRegistration(…) 方法。 @Override protected void cus...

JackyZhang的博客 266

SpringMVC-part08拦截器+文件上传下载

8、拦截器+文件上传下载 这是SpringMVC视频同步的最后一章:拦截器以及文件的上传和下载实现! 拦截器 概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。 **过滤器与拦截器的区别:**拦截器是AOP思想的具体应用。 过滤器 servlet规范中的一部分,任何java web工程都可以使用 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截 拦截器 拦截器是

qq_56594964的博客 166

SpringMVC学习笔记【part1】基础配置

SpringMVC 学习笔记 Part1 1. 三层架构和MVC 三层架构: 咱们开发服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程序。使用Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构。 表现层:WEB层,用来和客户端进行数据交互的。表现层一般会采用MVC的设计模型 业务层:处理公司具体的业务逻辑的 持久层:用来操作数据库的 MVC模型: MVC全名是Model View Controller 模型视图控制器,每个部分各司其职。 Model:数据模型,

Parker_cpp的博客 305

springmvc的MultipartFile参数如果不上传文件报错的问题

1 @RequestMapping(value = "/updateInformation",method = RequestMethod.POST) 2 @ResponseBody 3 public Boolean updateInformation(Commodity commodity, HttpServletRequest request)throw...

weixin_30729609的博客 662

SpringMVC(六)文件上传

SpringMVC(六)文件上传 Spring MVC对上传文件的支持 首先,DispatcherServlet会使用适配器模式,将HttpServletRequest接口对象转换为MultipartHttpServertRequest对象。MultipartHttpServetRequest接口拓展了HttpServletRequest接口的所有方法,而且定义了一些操作文件的方法,这样通过这些方...

Sadlay的博客 511

java mime上传_JavaWeb中实现文件上传的方式有哪些?

上回我们说了下文件下载的方式有哪些,这次我们从不同的环境下简单来说说文件上传的方式有哪些。文件上传的方式Servlet2.5 方式Servlet3.0 方式SpringMVC 方式案例实操Servlet2.5 方式文件上传涉及到前台页面的编写和后台服务器端代码的编写,前台发送文件,后台接收并保存文件,这才是一个完整的文件上传。1) 前台页面在做文件上传的时候,会有一个上传文件的界面,首先我们需要一...

weixin_28782251的博客 90

问题:JavaWeb有哪些文件上传的方式

问题:JavaWeb中实现文件上传的方式有哪些? 上回我们说了下文件下载的方式有哪些,这次我们从不同的环境下简单来说说文件上传的方式有哪些。 文件上传的方式 Servlet2.5 方式 Servlet3.0 方式 SpringMVC 方式 案例实操 Servlet2.5 方式 文件上传涉及到前台页面的编写和后台服务器端代码的编写,前台发送文件,后台接收并保存文件,这才是一个完整的文件上传。 1) 前台页面 在做文件上传的时候,会有一个上传文件的界面,首先我们需要一个表单,并且表单的请求方式为 POST;

weixin_52392949的博客 179

SpringMVC 里的文件上传,下载(笔记)

文件上传 在以前的学习里有学过文件上传。主要是: 1.使用原始的代码。 2.使用layui里的方法。 在C层的话就是,如下: protected void doAddPic(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json;charset=utf-8"); // 得到上

bluelimon的博客 149

SpringMVC之文件上传

SpringMVC之文件上传 文件上传三要素 表单项 type=“file” 表单的提交方式 method=“POST” 表单的enctype属性是多部分表单形式 enctype=“multipart/form-data" 文件上传原理 当form表单修改为多部分表单时,request.getParameter()将失效。 当form表单的enctype取值为 application/x-www-form-urlencoded 时, form表单的正文内容格式是: name=value&name=v

weixin_49741990的博客 164

JavaWeb中实现文件上传的方式有哪些?

文件上传的方式 Servlet2.5 方式 Servlet3.0 方式 SpringMVC 方式 案例实操 Servlet2.5 方式 文件上传涉及到前台页面的编写和后台服务器端代码的编写,前台发送文件,后台接收并保存文件,这才是一个完整的文件上传。 1) 前台页面 在做文件上传的时候,会有一个上传文件的界面,首先我们需要一个表单,并且表单的请求方式为 POST;其次我们的 form 表单的 enctype 必须设为”multipart/form-data”...

weixin_51514337的博客 133
上一篇: SpringMVC学习笔记【part4】响应数据类型
下一篇: SpringMVC学习笔记【part6】跨服务器文件上传
Parker7
博客等级 码龄7年 18粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Parker7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值