文件上传

配置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. POJ 1947 树DP获得冠军

    特定N点,N-1的关系.建立了一棵树,问至少减去几个边缘节点可以被作为得到P树.树典型DP称号 dp[cur][j] :记录cur节点,为了得到一个j除去该子树的节点的边的最小数目 对当前树的每个子树 ...

  2. bootstrap3-datepicker and jquery.form.js

    bootstrap3-datepicker 和 jquery.form.js 这两个控件又起来都比较简单,就一起介绍了. 先说datepicker. github上的地址是:https://githu ...

  3. [转]C/C++:构建你自己的插件框架

    本文译自Gigi Sayfan在DDJ上的专栏文章.Gigi Sayfan是北加州的一个程序员,email:gigi@gmail.com. 本文是一系列讨论架构.开发和部署C/C++跨平台插件框架的文 ...

  4. CSS边框阴影效果

    ul { margin:5px 0 0 0; padding:0; list-style:none; width:300px; background:#f1f1f1; }li { border-lef ...

  5. OpenGL绘制棱锥,剔除

    /** * 缓冲区工具类 */public class BufferUtil { /**  * 将浮点数组转换成字节缓冲区  */ public static ByteBuffer arr2ByteB ...

  6. Date的使用

    方法 说明 Date() 返回当日的日期和时间 getDate() 获取当天(1-31) getDay() 获取当天的星期(0-6) getMonth() 获取月份(0-11) getFullYear ...

  7. 控制台命令行API

    js调试系列: 控制台命令行API   上次初步介绍了什么是控制台<js调试系列: 初识控制台>,以及简单的 console.log 输出信息.最后还有两个小问题,我们就当回顾,来看下怎么 ...

  8. HAProxy+apache实现web服务动静分离

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支 ...

  9. javaFile循环列出指定目录下的所有文件(源代码)

    package javatest.basic22; import java.io.File; import java.io.IOException; public class FileTest { p ...

  10. 最短路径 dijkstra

    最短路径 dijkstra #include <stdio.h> #include <string.h> #include <limits.h> #define M ...