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

本文共 5842 字,大约阅读时间需要 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

你可能感兴趣的文章
【trie树】HDU4825 Xor Sum
查看>>
SCCM TP4部署Office2013
查看>>
Linux系统启动过程,grub重装。
查看>>
使用Putty密钥认证机制远程登录Linux
查看>>
一不小心,老司机又翻车了
查看>>
理解思科IPS系统的traffic flow notifications
查看>>
【博客话题】技术人生之三界修炼
查看>>
Ext JS 6开发实例(三) :主界面设计
查看>>
Hyper-V 3中虚拟机CPU竞争机制
查看>>
【原创】Oracle RAC原理和安装
查看>>
东哥读书小记 之 《MacTalk人生元编程》
查看>>
《随机出题软件》&《随机分队软件》源码(Windows API)
查看>>
python 文件及文件夹操作
查看>>
Android自定义ListView的Item无法响应OnItemClick的解决办法
查看>>
Building Apps for Windows Phone 8.1教程下载地址整理
查看>>
移动Web—CSS为Retina屏幕替换更高质量的图片
查看>>
[Linux 性能检测工具]SAR
查看>>
JS 运行、复制、另存为 代码。
查看>>
一个经典编程面试题的“隐退”
查看>>
阿里公共DNS 正式发布了
查看>>