文件上传

配置MultipartResolver

<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<property name="maxUploadSize" value="5242880" />
</bean>

dispatcher-servlet.xml配置文件配置MultipartResolverid属性必须要有且值只能是multipartResolver,否则会报错。

为了让CommonsMultipartResolver正常工作,必须先将Jakarta Commons FileUploadJakarta Commons io的类包添加到类路径下。

defaultEncoding必须和用户JSPpageEncoding属性一致,以便正确读取表单内容。

编写控制器

@Controller
@RequestMapping("demo")
public class DemoController {
@RequestMapping("/upload")
public String upload(HttpServletRequest request,
@RequestParam("file") MultipartFile file) throws Exception {
if (!file.isEmpty()) {
file.transferTo(new File("F:/" + file.getOriginalFilename()));
request.setAttribute("info", "上传成功!");
} else {
request.setAttribute("info", "上传失败!");
}
return "message";
}
}

Spring MVC 会将上传文件绑定到MultipartFile对象中。MultipartFile常用方法说明:

  • byte [] getBytes():获取文件数据。
  • String getContentType():获取文件MIME类型,如image/pjpegtext/plain等。
  • InputStream getInputStream():获取文件流。
  • String getName():获取表单中文件组件的名字。
  • String getOriginalFileName():获取上传文件的原名。
  • long getSize():获取上传文件的字节大小,单位是byte
  • boolean isEmpty():是否有上传的文件。
  • void transferTo(File dest):可以使用该文件将上传的文件保存到一个目标文件中。

编写文件上传表单页面

<html>
<head>
<title>Spring MVC 文件上传</title>
</head>
<body>
<h2>请选择文件:</h2>
<form method="post" action="${basePath}demo/upload"
enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" />
</form>
</body>
</html>

负责上传文件的表单和一般表单有一些区别,表单的类型编码必须是multipart/form-data类型。

问题

问题一

异常信息

java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory

原因及解决方法

缺少commons-fileupload-x.x.x.jar文件。目前(2016年9月06日)最新版本是1.3.2。

<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>

问题二

异常信息:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
原因及解决方法:

配置MultipartResolver时未添加添加id属性或者id属性的值不是multipartResolver

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<property name="maxUploadSize" value="5242880" />
</bean>

Spring MVC 笔记 —— Spring MVC 文件上传的更多相关文章

  1. Spring Boot 2.X 实现文件上传(三)

    使用 SpringBoot 项目完成单个.多个文件的上传处理,并将上传的文件保存到指定目录下. 代码演示案例 所有的 HTML 页面文件 index.html <!DOCTYPE html> ...

  2. 从零开始的Spring Boot(3、Spring Boot静态资源和文件上传)

    Spring Boot静态资源和文件上传 写在前面 从零开始的Spring Boot(2.在Spring Boot中整合Servlet.Filter.Listener的方式) https://www. ...

  3. Spring提供的API实现文件上传

    Spring为我们提供了文件上传接口MultipartRequest及其实现类StandardMultipartFile StandardMultipartFile是StandardMultipart ...

  4. spring mvc 3.0 实现文件上传功能

    http://club.jledu.gov.cn/?uid-5282-action-viewspace-itemid-188672 —————————————————————————————————— ...

  5. Spring MVC—拦截器,文件上传,中文乱码处理,Rest风格,异常处理机制

    拦截器 文件上传 -中文乱码解决 rest风格 异常处理机制 拦截器 Spring MVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerI ...

  6. Spring MVC(四)文件上传

    文件上传步骤 1.写一个文件上传的页面 2.写一个文件上传的控制器 注意: 1.method="post" 2.enctype="multipart/form-data& ...

  7. spring mvc框架+ ajax实现 文件上传

    1.前端页面,通过form表单提交,必须设置 enctype="multipart/form-data" 代表form表单在发送到服务器时候编码方式是二进制类型,一般用于图片.mp ...

  8. springMVC+spring+mybatis整合(包括文件上传和下载)

    driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncod ...

  9. Spring MVC4使用Servlet3 MultiPartConfigElement文件上传实例

    在这篇文章中,我们将使用Spring MultipartResolver 实现 StandardServletMultipartResolver在Servlet3环境中实现单点和多文件上传功能.Spr ...

  10. 基于spring 3.0mvc 框架的文件上传实现

    Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框 ...

随机推荐

  1. Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法

    原文:Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法 很多朋友做安装包的时候,所打包的软件需要.NET Framework之类的环境,他 ...

  2. MySQL的C语言编程(一)

    原文:MySQL的C语言编程(一) 初学MySQL,记录一下MySQL用c语言编程时遇到的问题. 这是我的源程序: int main(void) { MYSQL *mysql=NULL; if((my ...

  3. Maven入门笔记

    首先安装Maven,Maven的安装很简单,这里就不在说了. 先要确定把工程放在哪个路径下,创建一个文件夹并且在该文件夹下打开shell命令.可以先运行下面的命令,创建一个工程: mvn archet ...

  4. C# 根据年、月、周、星期获得日期等

    原文:C# 根据年.月.周.星期获得日期等 /// 取得某月的第一天 /// </summary> /// <param name="datetime">要 ...

  5. mvc拦截器

    在ASP.NET MVC中,有三种拦截器:Action拦截器.Result拦截器和Exception拦截器.这里说的是第一种和第三种.其实所谓的ASP.NET MVC拦截器,也没什么神秘的,就是一个普 ...

  6. CSS3教程:box-sizing属性的理解border、padding与容器宽度的关系

    说到 IE 的 bug,一个臭名昭著的例子是它对于“盒模型”的错误解释:在 IE5.x 以及 Quirks 模式的 IE6/7 中,将 border 与 padding 都包含在 width 之内.这 ...

  7. C#中float的取值范围和精度

    原文:C#中float的取值范围和精度 float类型的表现形式: 默认情况下,赋值运算符右侧的实数被视为 double. 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例中所示: floa ...

  8. 前端JS开发框架

    前端JS开发框架-DHTMLX 发框架-DHTMLX   一:介绍 dhtmlxSuite是一个JavaScript库,提供了一套完整的Ajax -驱动UI组件.我们能够使用dhtmlxSuite构建 ...

  9. myeclipse搭建svn插件

    在网上查了一下,安装的方法有几种,这里给大家推荐一种快速安装的方法. //第一步 : 下载 site-1.6.5.zip //===================================== ...

  10. 学习GDI+ (1)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...