springboot自动会对multipart/form-data格式的request进行解析,而其中的inputstream会被框架拿走,之后手动解析就不能了。因此需要配置。具体并不是很了解,但是以下代码在我的环境中是可用的。copy下来作为参考,需要的同学请拿走。
手动配置一个配置类,即@Configuration,之后写入一下内容,似乎是因为:
猜测:MultipartResolver在initBinder的时候默认会自动解析request,并清空文件流里的内容,导致在controller中的request获取不到文件流信息,当设置multipartResolver.setResolveLazily(true);则不会自动解析。
这部分code 的核心就是,multipartResolver.setResolveLazily(true); 这一句代码。
而也可以推测,SpringBoot的内置的文件解析的对象的名字,就是:multipartResolver
以下为代码:
package com.example.theserver.restfulAPI;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
@Configuration
public class UploadConfig {
//显示声明CommonsMultipartResolver为mutipartResolver
@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
//resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常
resolver.setResolveLazily(true);
resolver.setMaxInMemorySize(40960);
//上传文件大小 100M 100*1024*1024
resolver.setMaxUploadSize(100 * 1024 * 1024);
return resolver;
}
}