您的位置:首页 > 编程语言 > Java开发

Spring MVC: org.springframework.web.multipart.MultipartException: Could not parse multipart servlet

2015-11-23 11:00 567 查看

错误信息:

nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided] with root cause

java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided

错误原因:

spring mvc文件上传可以有两种方式,一种是common-upload,一种是servlet-api 3.0的文件上传,我选择的是servlet 3.0的文件上传。

因此在mvc-dispatcher-servlet.xml中需要配置支持servlet 3.0文件处理的resovler

<bean id="multipartResolver"    class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</bean>


本以为spring mvc会处理好servlet 3.0文件上传的配置,就只配置了resolver,结果就出现了现在的这个exception。

解决办法:

servlet 3.0 api中规定了两种方式配置上传文件的servlet:

1. 在servlet类的java代码中添加@MultipartConfig

@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024,
maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)


2.如果没有在上传文件的servlet中添加,则需要在web.xml里配置的servlet里,而spring mvc中就是DispatcherServlet里添加multipart-config片段。

<multipart-config>
<location>/tmp</location>
<max-file-size>20848820</max-file-size>
<max-request-size>418018841</max-request-size>
<file-size-threshold>1048576</file-size-threshold>
</multipart-config>


multipart-config所有的属性都是可选的,具体属性如下:

fileSizeThreshold: int 当数据量大于该值时,内容将被写入文件,默认值为0bytes

location: String 存放生成的文件地址,默认值为“”,文件地址是文件系统里的据对路径,它不支持相对路径,所以一般不要配置它

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

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

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

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

3.这里所有有关size的属性,单位都是byte
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: