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

错误信息:

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值