博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC3.2 通过Servlet3.0实现文件上传
阅读量:5110 次
发布时间:2019-06-13

本文共 5896 字,大约阅读时间需要 19 分钟。

Servlet3.0规范增加了对文件上传的原生支持,这里记录一下Spring MVC3通过Servlet3上传文件的实现。

配置文件

applicationContext.xml

web.xml中需要配置multipart-config片段

SpringMvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/config/spring/appContext.xml,/WEB-INF/config/spring/appInterceptor.xml
52428800
52428800
0
1

update.jsp上传界面

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%>
twovs.com测试servlet3+springmvc3.2上传文件

Please upload a file

UpdateTest4Servlet.java Spring MVC Controller

/** * $id: com.twovv.update.UpdateTest4Servlet.java by fjt 2013-2-15 * * @version:0.1 * * Copyright (c) 2013 twovv.com  */package com.twovv.update;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;/** @Class: UpdateTest4Servlet @TODO: 测试上传 */@ControllerpublicclassUpdateTest4Servlet{
/** * @method: fileUpload() -by fjt * @TODO: 文件上传 * @return String */@RequestMapping(value="/test/up",method=RequestMethod.POST)publicString fileUpload(@RequestParamString name,@RequestParamMultipartFile file){
////你自己的存储逻辑//这里只打印一下接收到的信息System.out.println(name);/** * file.getName()获取不到文件名,只能拿到一个“file”字符串 * Servlet3没有提供直接获取文件名的方法,可以从请求头中解析出来: * file.getHeader("content-disposition")方法间接获取得到。 */System.out.println(file.getName());System.out.println(file.getSize());return"";}}

简单的配置完成,现在可以通过访问http://www.twovs.com/upload.jsp来测试通过servlet3.0的新特性来上传文件了。

碰到的问题

Spring @RequestParam绑定不到值(获取不到值)。

异常日志

2013-02-1504:05:02,862[DEBUG]-[org.springframework.web.servlet.DispatcherServlet]DispatcherServletwith name 'SpringMvc' processing POST request for[/ueditor/test/up.htm]2013-02-1504:05:02,869[DEBUG]-[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping]Looking up handler method for path /test/up.htm2013-02-1504:05:02,879[DEBUG]-[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping]Returning handler method [public java.lang.String com.twovv.update.UpdateTest4Servlet.fileUpload(java.lang.String,org.springframework.web.multipart.MultipartFile)]2013-02-1504:05:02,879[DEBUG]-[org.springframework.beans.factory.support.DefaultListableBeanFactory]Returning cached instance of singleton bean 'updateTest4Servlet'2013-02-1504:05:02,895[DEBUG]-[org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor]Opening JPA EntityManagerinOpenEntityManagerInViewInterceptor2013-02-1504:05:03,055[DEBUG]-[org.hibernate.internal.SessionImpl]Opened session at timestamp:136087230292013-02-1504:05:03,112[DEBUG]-[org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver]Resolving exception from handler [public java.lang.String com.twovv.update.UpdateTest4Servlet.fileUpload(java.lang.String,org.springframework.web.multipart.MultipartFile)]: org.springframework.web.bind.MissingServletRequestParameterException:RequiredString parameter 'name'isnot present2013-02-1504:05:03,118[DEBUG]-[org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver]Resolving exception from handler [public java.lang.String com.twovv.update.UpdateTest4Servlet.fileUpload(java.lang.String,org.springframework.web.multipart.MultipartFile)]: org.springframework.web.bind.MissingServletRequestParameterException:RequiredString parameter 'name'isnot present2013-02-1504:05:03,118[DEBUG]-[org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver]Resolving exception from handler [public java.lang.String com.twovv.update.UpdateTest4Servlet.fileUpload(java.lang.String,org.springframework.web.multipart.MultipartFile)]: org.springframework.web.bind.MissingServletRequestParameterException:RequiredString parameter 'name'isnot present2013-02-1504:05:03,119[DEBUG]-[org.springframework.web.servlet.DispatcherServlet]NullModelAndView returned to DispatcherServletwith name 'SpringMvc': assuming HandlerAdapter completed request handling2013-02-1504:05:03,119[DEBUG]-[org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor]Closing JPA EntityManagerinOpenEntityManagerInViewInterceptor2013-02-1504:05:03,148[DEBUG]-[org.springframework.orm.jpa.EntityManagerFactoryUtils]Closing JPA EntityManager2013-02-1504:05:03,155[DEBUG]-[org.springframework.web.servlet.DispatcherServlet]Successfully completed request

异常原因:根据Spring3的提示,缺少multipart-config配置

In order to useServlet3.0 based multipart parsing, you need to mark the DispatcherServletwith a "multipart-config" section in web.xml,orwith a javax.servlet.MultipartConfigElementin programmatic Servlet registration,orincase of a custom Servletclass possibly with a javax.servlet.annotation.MultipartConfig annotation on your Servletclass.Configuration settings such as maximum sizes or storage locations need to be applied at that Servlet registration level asServlet3.0 does not allow for those settings to be donefrom the MultipartResolver.

解决办法

按照提示需要在web.xml中配置的DispatcherServlet中添加multipart-config片段。

MultipartConfig所有的属性都是可选的,具体属性如下:

  • fileSizeThreshold int 当数据量大于该值时,内容将被写入文件。

  • location String 存放生成的文件地址。

  • maxFileSize long 允许上传的文件最大值。默认值为 -1,表示没有限制。

  • maxRequestSize long 针对该 multipart/form-data 请求的最大数量,默认值为 -1,表示没有限制。

1、location属性,既是保存路径(在写入的时候,可以忽略路径设定),又是上传过程中临时文件的保存路径,一旦执行write方法之后,临时文件将被自动清除。

2、上传过程中无论是单个文件超过maxFileSize值,或者上传总的数据量大于maxRequestSize值都会抛出IllegalStateException异常

参考:

 
 

转载自:http://www.sxrczx.com/t/article/a3fadb5bd6734a8891c4dad43510ca5e.htm

转载于:https://www.cnblogs.com/chenying99/p/3746853.html

你可能感兴趣的文章
Jquery easyui Tree的简单使用
查看>>
《Linux命令行与shell脚本编程大全》 第六章环境变量
查看>>
Java集合框架学习总结
查看>>
commands 模块 与sys模块
查看>>
洛谷 P2234 [HNOI2002]营业额统计
查看>>
SetTimeOut 与 SetInterval 区别
查看>>
VC++编程 两类典型的 LNK2001错误分析及解决方法
查看>>
对于redis框架的理解(三)
查看>>
C语言模块化编译介绍
查看>>
file控件,以及fileList对象。
查看>>
关于多线程(GCD介绍)
查看>>
设计模式之观察者模式
查看>>
T-SQL基础(五)之增删改
查看>>
Jzoj4786 小a的强迫症
查看>>
redis配置密码
查看>>
bootstrap之辅助类
查看>>
子元素定位,父元素高度自适应
查看>>
js获取json属性值的两种方法
查看>>
[Algorithms] Queue & Priority Queue
查看>>
[React + Functional Programming ADT] Connect State ADT Based Redux Actions to a React Application
查看>>