SpringMVC之文件上传
上传是web程序中常见的功能,当使用上传时,需要把form表单中的enctype属性改为multipart/form-data,这样就使用了二进制进行上传,而后台需要解析这些数据。DispatcherServlet并不能解析它,而需要委托给Spring中的MultipartResolver接口实现去解析。在Spring3.1之后,Spring内置了两种MultipartResolver的实现:
- CommonsMultipartResolver:使用了Jakarta Commons FileUpload来解析
- StandardServletMultipartResolver:基于Serlvet3.0对multipart的支持
本随笔将对二者就行举例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/user/upload" method="post" enctype="multipart/form-data">
<input name="txt" type="text" placeholder="文本信息"><br>
<input name="file" type="file"><br>
<input type="submit">
</form>
</body>
</html>
Controller代码:
package cn.powerfully.demo.web.controller; import java.io.IOException; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile; @Controller
@RequestMapping("user")
public class UserController { @RequestMapping(path = "upload", method = RequestMethod.GET)
public String uploadUI(Model model) {
return "upload";
} @RequestMapping(path = "upload", method = RequestMethod.POST)
public String upload(Model model, String txt, MultipartFile file) throws IllegalStateException, IOException {
if (file == null) {
model.addAttribute("msg", "上传失败!");
} else {
String msg = String.format("文本信息:%s<br>文件名:%s<br>文件大小:%d字节<br>", txt, file.getOriginalFilename(),
file.getSize());
//...
model.addAttribute("msg", msg);
}
return "msg";
} }
一、StandardServletMultipartResolver
首先需要创建StandardServletMultipartResolver对象,可以在springMVC配置文件中添加如下代码,注意一定要加上id(按id装配)
<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver" />
对于上传的参数,不是在bean中配置的,而是在web.xml中的DispatcherServlet配置的:
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<location>/</location>
<max-file-size>102400</max-file-size>
<max-request-size>204800</max-request-size>
</multipart-config>
</servlet>
使用multipart-config节点进行配置,在multipart-config中,有四个子节点:
| location | 上传文件所存放的临时目录。必须指定 |
| max-file-size | 文件的最大大小,单位为字节。默认没有限制 |
| max-request-size | 请求的最大大小,单位为字节。默认没有限制 |
| file-size-threshold | 文件大小阈值,当大于这个阈值时将写入到磁盘,否则在内存中。默认值为0 |
二、CommonsMultipartResolver
因为基于Jakarta Commons FileUpload,所以要先引入commons-fileupload
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
接着只需要在springMVC的配置文件中装载Bean即可
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
要配置参数,只要对bean注入参数:
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<property name="maxUploadSize" value="1024000" />
<property name="maxInMemorySize" value="204800" />
<property name="uploadTempDir" value="/" />
</bean>
| defaultEncoding | 默认的解析编码,默认为iso-8859-1 |
| maxUploaadSize | 上传文件的最大大小,默认为-1(无限制) |
| maxInMemorySize | 内存缓冲区大小,超过时写入硬盘,默认为-1(无限制) |
| uploadTempDir | 临时文件目录,默认是serlvet容器的临时目录 |
除了以上参数,还有其他的......
SpringMVC之文件上传的更多相关文章
- springmvc图片文件上传接口
springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller; import java.awt.image.Buffer ...
- SpringMVC学习--文件上传
简介 文件上传是web开发中常见的需求之一,springMVC将文件上传进行了集成,可以方便快捷的进行开发. springmvc中对多部件类型解析 在 页面form中提交enctype="m ...
- Spring +SpringMVC 实现文件上传功能。。。
要实现Spring +SpringMVC 实现文件上传功能. 第一步:下载 第二步: 新建一个web项目导入Spring 和SpringMVC的jar包(在MyEclipse里有自动生成spring ...
- SpringMVC之文件上传异常处理
一般情况下,对上传的文件会进行大小的限制.如果超过指定大小时会抛出异常,一般会对异常进行捕获并友好的显示出来.以下用SpringMVC之文件上传进行完善. 首先配置CommonsMultipartRe ...
- springmvc实现文件上传
springmvc实现文件上传 多数文件上传都是通过表单形式提交给后台服务器的,因此,要实现文件上传功能,就需要提供一个文件上传的表单,而该表单就要满足以下3个条件 (1)form表彰的method属 ...
- 【SpringMVC】文件上传Expected MultipartHttpServletRequest: is a MultipartResolver错误解决
本文转载自:https://blog.csdn.net/lzgs_4/article/details/50465617 使用SpringMVC实现文件上传时,后台使用了 MultipartFile类, ...
- 关于SpringMVC的文件上传
关于文件的上传,之前写过2篇文章,基于Struts2框架,下面给出文章链接: <关于Struts2的文件上传>:http://www.cnblogs.com/lichenwei/p/392 ...
- 一起学SpringMVC之文件上传
概述 在Web系统开发过程中,文件上传是普遍的功能,本文主要以一个简单的小例子,讲解SpringMVC中文件上传的使用方法,仅供学习分享使用,如有不足之处,还请指正. 文件上传依赖包 如下所示,文件上 ...
- SpringMVC+ajax文件上传实例教程
原文地址:https://blog.csdn.net/weixin_41092717/article/details/81080152 文件上传文件上传是项目开发中最常见的功能.为了能上传文件,必须将 ...
- 6.学习springmvc的文件上传
一.文件上传前提与原理分析 1.文件上传必要前提: 2.文件上传原理分析: 3.需要引入的jar包: 二.传统方式文件上传程序 1.pom.xml <dependency> <gro ...
随机推荐
- (不用循环也可以记录数组里的数)Color the ball --hdu--1556
题目: N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次 ...
- 23种设计模式(1)-Facade设计模式
前记 曾经我遇见的一个需求是这样的,接口A有个方法void methodA(),类B需要实现接口A的methodA()方法,并且在类B中需要把methodA()方法内部处理逻辑获得的结果利用C类实例的 ...
- C#期末大作业 消消乐 2017-06-01 18:11 275人阅读 评论(0) 收藏
邻近期末,忙于刷题之余意识到期末大作业来不及了,匆匆赶下了作业,虽说做的很是粗糙,但完全原创的 下载链接 https://pan.baidu.com/s/1cCNLr4 大体的做大约3天完成了: 第一 ...
- 《mysql必知必会》学习_第四章_20180724_欢
P27: select prod_name from products; # select 列 from 表 # 从表products 中检索 名为 prod_name 的列 P28 多个语句一起必须 ...
- Codeforces Round #264 (Div. 2) D. Gargari and Permutations 多序列LIS+dp好题
http://codeforces.com/contest/463/problem/D 求k个序列的最长公共子序列. k<=5 肯定 不能直接LCS 网上题解全是图论解法...我就来个dp的解法 ...
- Scala_针对集合的操作
针对集合的操作 遍历操作 列表的遍历 scala> val list = List(1,2,3,4,5,6) list: List[Int] = List(1, 2, 3, 4, 5, 6) s ...
- SRM470
250pt 给定1个最多16颜色的字符串(颜色可以重复),甲在最左边,乙在最右边.轮流操作,每次可以消除一种颜色. 给定一个k,问谁能最先消除完到位置k之间的障碍. 思路: 每个人肯定优先取对方没有的 ...
- unidbgrid列排序
unidbgrid列排序 1)指定列的.sortable:=true; 2)unidbgrid.columnsort事件添加如下代码: if SameText(Column.FieldName, 'I ...
- OS基础:动态链接库(一)
动态链接库(一) 1.新建文件夹,命名lpt 2.用vc6.0建立一个空工程(Win 32 Dynamic-Link Library),名称:lptDll1 3.新建C++文件,命名:lptDll1: ...
- Elasticsearch 系列4 --- Windows10安装Kibana
Kibana是Elastic Stack家族内的一部分,它是一个管理网站,与ES(Elastic Search)集成可以用来管理ES的索引,除ES外它还可以跟Elastic家族的其他组件进行整合如lo ...