Spring MVC 文件上传与下载快速学习

摘要:
但是,如果要使用SpringMVC的解析器进行文件上传以处理文件上传,则需要在Spring的applicationContext中添加SpringMVC提供的MultipartResolver语句。然后,每次客户端发出请求时,springMVC都会检查请求是否包含多媒体信息。如果是,它将使用MultipartResolver来解析它。SpringMVC将使用支持文件处理的MultipartHttpServletRequest来包装当前的HttpServlet请求,然后使用MultipartHttpServlet请求来处理文件。由于Spring MVC的底层MultipartResolver使用Commons文件上传,因此需要添加对Commons文件上载的支持。罐子

1、文件上传下载的原理

  Web 中文件上传下载是和 HTTP 协议分不开的,想要更加深入的理解文件上传和下载,必须要对 HTTP 协议有充分认识。

文件上传

  在 TCP/IP 中,最早出现的文件上传机制是 FTP,这是将文件由客户端发送到服务器的标准机制。而在 Web 开发中,使用应用层协议 HTTP,通过在请求头中设置传输的内容类型 Content-Type 为 multipart/form-data; boundary=流分隔符值 来上传文件,这个流分隔符用来区分一个文件上传的开始和结束,

  在使用springMVC进行系统实现时,springMVC默认的解析器里面是没有加入对文件上传的解析的,这可以方便我们实现自己的文件上传。但如果你想使用springMVC对文件上传的解析器来处理文件上传的时候就需要在spring的applicationContext里面加上springMVC提供的MultipartResolver的申明。这样之后,客户端每次进行请求的时候,springMVC都会检查request里面是否包含多媒体信息,如果包含了就会使用MultipartResolver进行解析,springMVC会使用一个支持文件处理的MultipartHttpServletRequest来包裹当前的HttpServletRequest,然后使用MultipartHttpServletRequest就可以对文件进行处理了。Spring已经为我们提供了一个MultipartResolver的实现,我们只需要拿来用就可以了,那就是org.springframework.web.multipart.commons.CommsMultipartResolver。因为springMVC的MultipartResolver底层使用的是Commons-fileupload,所以还需要加入对Commons-fileupload.jar的支持。

一:搭建Springmvc开发环境

          首先我们在eclipse中,新建一个maven项目,我这里已经有一个项目就直接用这个了netmarket。

导入所需要的jar包,名称为:commons-fileupload-xxx.jar,(xxx表示版本号)这个是apache开发的一个专门用来上传文件的工具包,其中预置了很多的文件上传的api供我们使用

1、导入jar包:

Spring MVC 文件上传与下载快速学习第1张

Spring MVC 文件上传与下载快速学习第2张

2、配置web.xml文件,在其中配置上我们的Springmv的控制分发器Servlet用于处理客户端请求的链接(我这里已经配好了直接截图)

Spring MVC 文件上传与下载快速学习第3张

3、上面初始化的配置文件netmk_web.xml主要是配置Springmvc的bean,这里除了需要配置视图解析器用来解析视图资源和基本的扫描包之外,还需要配置一个很重要的bean,该bean的名字是“multiPartResolver”,主要是用来处理文件的,其中可以配置的属性为上传文件的大小和编码.,也配置一个视图吧,一会写控制器的时候好返回视图

Spring MVC 文件上传与下载快速学习第4张

 

CommonsMultipartResolver允许设置的属性有:
    defaultEncoding:表示用来解析request请求的默认编码格式,当没有指定的时候根据Servlet规范会使用默认值ISO-8859-1。当request自己指明了它的编码格式的时候就会忽略这里指定的defaultEncoding。
    uploadTempDir:设置上传文件时的临时目录,默认是Servlet容器的临时目录。
    maxUploadSize:设置允许上传的最大文件大小,以字节为单位计算。当设为-1时表示无限制,默认是-1。
    maxInMemorySize:设置在文件上传时允许写到内存中的最大值,以字节为单位计算,默认是10240。

可能有些人会问为什么在包里没有找到这几个属性呢,这个时候就要去看源码了,这里附上

CommonsMultipartResolver源码注释部分片段:

Spring MVC 文件上传与下载快速学习第5张

 

 二:实现文件上传的功能

1、首先我们来新建一个jsp页面,命名为:uploadform.jsp写一个上传的页面form表单,其中一定要注意的是在表单的属性中添加entcypt="multipart/form-data",这表示上传的将会是二进制流的格式,以规定的二进制进行上传,便于服务器处理,使用post请求:

Spring MVC 文件上传与下载快速学习第6张

 

2:再写一个上传成功的jsp页面,主要是用来当上传成功时候跳转的页面,命名为:welcome.jsp

Spring MVC 文件上传与下载快速学习第7张

3:写好了jsp页面,接下来就是写我们的控制器了,Springmvc控制器,我这里就直接用managerContorller这个类,如下所示,注意其中使用MultipartFile来接受form表单传过来的file文件,MultipartFile有几个核心的api,可以供我们使用,比如 boolean isEmpty(),用来判断文件是否为空。void transferTo( File file),把文件写入目标路径地址.

Spring MVC 文件上传与下载快速学习第8张

这里设置视图名称,可能会问,为什么不加“/”目录和.jsp后缀,我在前面的netmk_web.xml文件中也配置了一个视图,往上翻去看。

写到这里启动服务器测试一下:

在浏览器中:

Spring MVC 文件上传与下载快速学习第9张

我用的断点调试,调到这里的时候,鼠标指到file参数,就会看到,参数已经传过来了

Spring MVC 文件上传与下载快速学习第10张

控制台显示:

Spring MVC 文件上传与下载快速学习第11张

处理请求前后这些是我之前写了一个拦截器,不用管它。

浏览器显示:

Spring MVC 文件上传与下载快速学习第12张

 这个时候可能会问,那上传多个文件怎么办?很简单的,在MultipartFile后面加个中括弧就可以了

Spring MVC 文件上传与下载快速学习第13张

 文件下载

1、

Spring MVC 文件上传与下载快速学习第14张

2、在控制器中:

 Spring MVC 文件上传与下载快速学习第15张

 浏览器中显示:

Spring MVC 文件上传与下载快速学习第16张

我设置的下载路径在d盘,本地下载很快的

Spring MVC 文件上传与下载快速学习第17张

免责声明:文章转载自《Spring MVC 文件上传与下载快速学习》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux安装redis,启动配置不生效(指定启动加载配置文件)matlab函数——shading函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HandlerMapping 详解

HandlerMapping 详解 1. 导言 万丈高楼平地起,SpringMVC的辉煌离不开每个组件的相互协作,上一章详细阐述了SpringMVC整个体系结构及实现原理,知道HandlerMapping在这个SpringMVC体系结构中有着举足轻重的地位,充当着url和Controller之间映射关系配置的角色。主要有三部分组成:HandlerMappi...

php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)

网上有很多php文件上传的类,文件上传处理是php的一个特色(至少手册上是将此作为php特点来展示的,个人认为php在数组方面的优异功能更有特色),学php的人都知道文件上传怎么做,但很多人在编程中却可能忽视了一些细节问题,那就是文件的类型(MIME)。在表单将文件提交给php做处理之前,浏览器会先解析识别一边是什么类型的文件,之后进入php处理环节,p...

SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制

SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制 前言 LZ最近升级SpringBoo框架到2.1.6,踩了一些坑,这里介绍的是文件上传大小限制。 升级前 #文件上传配置 1.5.9 spring: http: multipart: enabled: tr...

SpringMVC实现国际化过程中所遇问题

前言:在利用SpringMVC实现国际化的过程中,看似简单,实则还是遇到了一些小问题,现在笔者对所遇问题总结如下。 注:笔者所用的编辑器为Intellij IEDA 14.1.7版本 1.国际化资源文件路径问题 如图,国际化资源放置位置带有目录,则在springmvc.xml配置文件中对国际化资源文件的配置如下。 注:①注意basename的写法,这...

C#上传视频等大文件

最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据、上传影音文件等。如果文件体积比较大,或者网络条件不好时,上传的时间会比较长(要传输更多的报文,丢包重传的概率也更大),用户不能刷新页面,只能耐心等待请...

JavaEE系列之(二)commons-fileupload实现文件上传、下载

一、文件上传概述     实现Web开发中的文件上传功能,需要两步操作:     1、在Web页面中添加上传输入项 <form action="#" method="post" enctype="multipart/form-data"> <input type="file" name="file...