springmvc文件上传

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

1. 文件上传前提

  1. 修改form的默认提交方式
  2. 请求方式必须是post
  3. input 的type必须是file

分析:form默认的请求体为键值对,修改后请求体将分割为不同部分,包含上传文件信息。

  1. 借助第三方组件,解析上传的文件信息。
    1 commons-fileupload
    2 commons-io

2. 实现功能

  1. jsp页面
<form action="/fileUpload" method="post" enctype="multipart/form-data">
名称:<input type="text" name="picname"/><br/>
图片:<input type="file" name="uploadFile"/><br/>
<input type="submit" value="上传"/>
</form>
  1. controller
    ① 首先获取文件的上传位置,文件要放在那里
    拿到项目根目录,如何拿到项目根目录request.getSession().getServletContext().getRealPath("/uploads/");
    ② 创建File对象去操作文件或文件夹,判断路径是否存在,不存在就使用file.mkdirs去创建,如何判断file.exists().
    ③ controller需要接收request,用来获取上传的文件。
    ④ 使用第三方工具解析request,这套东西包含三个对象(DiskFileItemFactory、ServletFileUpload、FileItem)
    ⑤ 创建DiskFileItemFactory
    ⑥ 利用factory去创建ServletFileUpload
    ⑦ upload.paresRequest(request)去解析request,得到FileItem集合
    ⑧ 遍历该集合,判断是否是form上传,item.isFromField()这个方法是判断是不是普通表单项目,否在就是上传文件项。
    ⑨上传文件项,item就是我们上传的文件,获取文件名,使用uuid对文件名命名。
    ⑩uuid的写法
    String uuid = UUID.randomUUID().toString().replace("-","");
    对文件名进行拼接。
    使用item.write(new File(path,filename));
    将文件写入到路径中。
    使用item.delete(),清除临时文件。

2. springmvc上传文件

原理:
上传文件,主要是解析request,获得上传文件项,完成上传,我们上面从⑦ upload.paresRequest(request)获取FileItem,就是获取上传文件项,然后调用item.write(new File(path,filename)),完成上传。
springmvc帮我们获取上传文件项,我们需要配置文件解析器,然后在controller方法参数中使用MultipartFile去接收上传文件项,调用方法完成生产即可。
注意:input 中的name属性的名称,必须与controller方法参数MultipartFile名称相同。

2.1配置文件解析器

导入jar

<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>
  1. id:multipartResolver 这个名称不能改
  2. class:CommonsMultipartResolver
bean.xml
<bean id="multipartResolver" <!-- id 的值是固定的-->
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为 5MB --> <property name="maxUploadSize"> <value>5242880</value>
</property>
</bean>
  1. controller中
    ①获取地址,这个地址本案例中使用的是,项目根目录下的地址
    request.getSession().getServletContext().getRealPath("/uploads/");
    得到地址后判断是否存在,如果不存在就创建。
    ②文件名称的问题,先获取文件名称
    upload.getOriginalFilename(),在使用uuid去唯一化名称。
    ③使用upload.transferTo(new File(path,filename))完成上传。
@RequestMapping(value = "/upload02.do")
    public String upload02(HttpServletRequest request, MultipartFile upload)throws Exception{
        String path = request.getSession().getServletContext().getRealPath("/upload/");
        File file = new File(path);
        if (!file.exists()){
            file.mkdirs();
        }
        String filename = upload.getOriginalFilename();
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename = uuid +"_"+ filename;
        upload.transferTo(new File(path,filename));
        return "success";
    }

jsp

<form action="${pageContext.request.contextPath.toString()}/user/upload02.do" method="post" enctype="multipart/form-data">
    <input type="file" name="upload"/>
    <input type="submit" value="上传文件">
</form>

3. 跨服上传文件

使用的jar

<dependency> 
	<groupId>com.sun.jersey</groupId> 
	<artifactId>jersey-core</artifactId> 
	<version>1.18.1</version> 
</dependency> 
<dependency> 
	<groupId>com.sun.jersey</groupId> 
	<artifactId>jersey-client</artifactId> 
	<version>1.18.1</version> 
</dependency>
  1. srpingmvc的方式去获取文件上传项
    配置CommonsMultipartResolver的bean,id为multipartResolver,controller方法中使用MultipartFile对象去获取文件上传项,input的name属性名称必须与MultipartFile 对象的名称相同
  2. 拿到文件上传项就可以使用jersey实现跨服上传。
    需要一个路径,和一个文件名称
    先创建对象,
    Client client = Client.create();
    设置路径和文件的名称(localhost:8888/…文件名称.jsp)
    WebResource webResource = client.resource(path+filename);
    上传文件 ,把文件上传项的字节数组传递过去。
    webResource.put(upload.getBytes());
SpringMVC 】什么是SpringMVC(三)?基于springmvc文件上传、基于springmvc的拦截器、基于springmvc的邮件发送 @@@@@@@@@@@邮件发送 通过java进行邮件发送,会涉及到两种协议: 1、smtp 简单邮件传输协议 作用:用于指定如何发送邮件 2、pop3 邮局协议版本3 作用:用于指定如何接收邮件 @@@@@@@@我们在进行邮件发送时,首先需要开通邮箱的这两个协议 @@@@@@@@邮件发送的过程 此处,我们以QQ邮箱为例,进行配置,准备工作 登录QQ邮箱,开通smtp,pop3协议 阅读详情

相关推荐

FileItem类

FileItem类的常用方法       1.boolean  isFormField()。isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段,还是一个文件表单字段。如果是普通文本表单字段,返回一个true否则返回一个false。因此可以用该方法判断是否是普通表单域还是文件上传表单域。       2.String getName()。getName方法

Smallhorn的专栏 6万+

java中isAssignableFrom()方法与instanceof关键字用法及通过反射配合注解为字段设置默认值

isAssignableFrom()方法与instanceof关键字的区别总结为以下两个点: isAssignableFrom()方法是从类继承的角度去判断,instanceof关键字是从实例继承的角度去判断。 isAssignableFrom()方法是判断是否为某个类的父类,instanceof关键字是判断是否某个类的子类。 使用方法: 父类.class.isAssignableF...

wkNote 11万+

java isformfield_isFormField()这个方法什么意思

展开全部判断某项是否是普抄通的表单2113类zhidao型。在上传版文件时5261用到List list = upload.parseRequest(request);for(FileItem item : list){if(item.isFormField()){//判断该4102表单项是否是普通类型}else{//否则该1653表单项是file 类型的}}扩展资料:define('APP_PA...

weixin_29169505的博客 2757

SpringMVC文件上传,下载

文章目录一.文件上传==备注:==方法一:1. 导入依赖2. 在springmvc-servlet.xml文件中添加如下配置3. 编写前端页面 index.jsp4. 编写Controller5. 配置tomcat,启动测试。方法二:1. 编写Controller2.更改前端页面请求3. 启动测试。二.文件下载0.准备工作1.编写Controller2.修改前端页面:index.jsp3.配置to...

林仔520的博客 448

struts2的文件上传操作源码解析

首先来看一下struts2的过滤器的doFilter方法 public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequ

renzhengxiao的博客 348

SpringMVC文件上传

文件上传客户端表单需要满足:表单项type=“file”表单的提交方式是post表单的enctype属性是多部分表单形式,及enctype=“multipart/form-data”

楠黎倾风的博客 2万+

SpringMVCSpringMVC实现文件上传

SpringMVCSpringMVC实现文件上传1. 传统文件上传2. SpringMVC文件上传3. SpringMVC跨服务器文件上传 form 表单的 enctype 取值必须是: multipart/form-data(默认值是:application/x-www-form-urlencoded) enctype:是表单请求正文的类型 method 属性取值必须是 Post 提供一个...

来日浅谈的博客 358

SpringMVC实现文件上传

1.文件上传之上传原理分析和搭建环境 springmvc文件上传也会用到Javaweb实现文件上传的组件。 1.1文件上传的必要条件 A .form 表单的 enctype 取值必须是:multipart/form-data (默认值是:application/x-www-form-urlencoded) enctype:是表单请求正文的类型 (默认表单提交数据的格式是键值对的方式,比如username=hehe&password=123。但我们把取值改成multipart,会把我们分成几个部分)

Java硬件工程师的博客 2004

SpringMVC--文件上传

文件上传是项目开发中最为常用的功能,为了实现文件上传必须将表单的method设置为POST,并将enctype设置为multipart/form-data(默认值是:application/x-www-form-urlencoded)。只有在这种情况下,浏览器才会把用户选择的文件二进制数据发送给服务器,之后再服务器端进行解析。其实web本身就可以使用文件上传功能,我们只需要再from中定义一个file标签(<input type=”file” />)即可。

龙源IT 的博客 735

SpringMVC文件上传

目录 一、SpringMVC与Struts文件上传对比 二、SpringMVC上传文件步骤 1、配置相关依赖 2、springmvc.xml 3、upload.jsp 4、方法代码 三、SpringMVC文件上传需要注意的几点地方 1、需要注意上传界面中的属性。因为是和方法中属性名对应: ​ 2、注意s...

m0_53151031的博客 277

springMVC文件上传

文件上传springMVC)1、利用Maven自动导入jar包2、前端 html 编写3、编写 java 实现4、配置文件 springMVC.xml5、演示(1)进入首页(2)选择文件(3)上传文件成功(4)文件已经在指定文件目录下(5)查看图片(6)再上传一个相同的图片 1、利用Maven自动导入jar包 <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fi

weixin_45920385的博客 875

springmvc文件上传

文章目录一、springmvc文件上传二、springmvc对json的支持 一、springmvc文件上传 struts文件上传 1、二进制存在数据库 2、存储到具体的硬盘目录 3、存储到服务器中 真实路径与虚拟路径 通过虚拟路径获取真实路径 request.getservletContext.getrealPath(虚拟路径); fileutil.copyInputStreamtofile...

qiu_hyun的博客 333

Springmvc文件上传

首先添加相关pom依赖 <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </de...

南下在线的博客 140

SpringMVC文件上传

SpringMVC文件上传前言代码效果图 前言 SpringMVC文件上传与struts的文件上传差不多,可以理解为SpringMVC是他的升级版 回顾一下,以前的方式 1,需要jsp页面 里面写个form表单 < form action=“xxx” method=“post” type=“mutipart/form-data”> < input type=“file” name=“xxx”/> < /form> 2、子控制器FIleUpladAction priva

licmi的博客 201

springmvc 文件上传

Springmvc 实现文件上传的三种途径: 这篇文章是基于Intellij的maven项目; 导入jar包: dependency> groupId>com.liferaygroupId> artifactId>org.apache.commons.fileuploadartifactId> version>1.2.2.LIFERAY-PATCHED-1version> d

summer_rain的博客 291

使用SpringMVC进行文件上传

文件上传是表现层常见的需求,在Spring MVC中底层使用Apache的Commons FileUpload工具来完成文件上传,对其进行封装,让开发者使用起来更加方便。接下来看看如何开发? 1 导入common-fileupload包 <!-- commons-fileUpload --> <dependency> <groupId>commons-fil...

Java客学习室 1033

SpringMVC文件上传

实现文件上传的思路: 创建form表单,enctype=“multipart/form-data(二进制)”,method=“post”,type=“file”。 开发控制器controller,控制器方法中的参数用:MultipartFile,进行文件的接收。 在SpringMVC配置文件中加入文件上传的解析器配置:CommonsMultipartReslover,id要严格写死:multipartReslover。 引入文件上传的相关依赖:commons-fileupload 具体代码: .

拒绝八股,追寻本质。 1540
上一篇: springmvc页面跳转
下一篇: springmvc的拦截器
RestartJava
博客等级 码龄6年 1粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值