记录一个开发中的问题
基于Servlet3.0
开发,上传文件,httpServletRequest.getParts()
报的异常
在添加Servlet
组件的时候,加上这么一项配置,
setMultipartConfig(new MultipartConfigElement(""))
public class MultipartConfigElement {
// 上传文件的临时路径 用Tomcat默认值
private String location;
// 上传文件最大 大小
private long maxFileSize;
// 多部分/表单数据允许的最大大小请求
private long maxRequestSize;
// 文件将被写入磁盘的大小阈值
private int fileSizeThreshold;
}
这是基于Servlet3.0 无web.xml开发,SpringMVC的配置也是大同小异,SpringBoot无需配置,他已经自动装配了。
SpringBoot自动装配的代码
记录这个问题网络上的一些坑
当我遇到这个问题的时候,一直在网上寻找资料,但网上的都是SpringMVC
,说的是缺少一个参数解析器MultipartResolver
,然后跟着他的配置,自己搭了一个SpringMVC环境,根本不起作用。
说明:MultipartResolver
该参数解析器,是在Servlet容器已经处理好或者自定义处理Request的文件流起作用,并不是引发Unable to process parts as no multi-part configuration has been provided。
还有一个就是说在Servlet组件上配置一个注解 @MultipartConfig
,但也是一样不起作用。
于是想到添加Servlet组件的时候,能否在加入一些其他配置,于是加上了这么一行配置dynamic.setMultipartConfig(new MultipartConfigElement("")); 就可以使用Servlet3.0的==httpServletRequest.getParts()==方法了。
然后自己也想到SpringBoot天生的就解决了该问题,于是看下源码,发现也是这么一行配置,使得我们在Controller层使用MultipartFile
接收文件流。
注意点:MultipartFile
参数名必须与上传文件字段名一致,否则会为空。
总结
- 遇到事情不要慌,先去网上逛逛,最好是查询官方文档。
- 在开发过程中发生问题,先debug调试,追踪下源码,能更清楚的知道问题的起源,便于我们解决。
- 做某项功能出现了问题,用大脑使劲想想,自己所接触的所有项目包括框架有没有与该功能相似,然后去借鉴。这对自己开发功能框架非常有用。