Fork me on GitHub

StandardServletMultipartResolver

注意:所有文章除特别说明外,转载请注明出处.

第17章 MultipartResolver

该组件有两个实现类:StandardServletMultipartResolver 和 CommonsMultipartResolver。前者使用Servlet3.0标准上传方式,后者使用Apache的commons-fileupload。

StandardServletMultipartResolver

该方法使用Servlet 3.0 标准的上传方式。在该方式下只需要调用request的getParts()方法就可以获取所有上传的文件。如果是单个的:request.getPart(fileName)。然后调用它到write(saveFileName)方法就能够将文件保存以saveFileName为文件名的文件。

该方法判断请求是否是上传请求:1.在isMultipart()方法中判断是否是post请求,如果是则再检查contentType是否是以”multipart/开头,如果是则判断该请求是上传请求。

CommonsMultipartResolver

该方法使用commons-fileupload来完成具体的上传操作。在CommonsMultipartResolver中判断是否是上传请求:isMultipart(),这将交给commons-fileupload的ServletFileUpload类完成。

public boolean isMultipart(HttpServletRequest request){
    return (request != null && ServletFileUpload.isMultipartContent(request));
}

CommonsMultipartResolver中实际处理request的方法是:resolveMultipart()

public MultipartHttpServletRequest resolveMultipart(final HttpServletRequest request) throws MultipartException{
    Assert.notNull(request, "request不能为空");
    if(this.resolveLazily){
        return new DefaultMultipartHttpServletRequest(request){
            @Override
            protected void initializeMultipart(){
                ...
            }
        }
    }
}

总结

MultipartResolver的作用是将上传请求包装成可以直接获取File的request。所以此重点是从request中解析出上传的文件并设置到相应的上传类型request中。

本文标题:StandardServletMultipartResolver

文章作者:Bangjin-Hu

发布时间:2019年10月15日 - 09:22:26

最后更新:2020年03月30日 - 08:17:15

原始链接:http://bangjinhu.github.io/undefined/第17章 MultipartResolver/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Bangjin-Hu wechat
欢迎扫码关注微信公众号,订阅我的微信公众号.
坚持原创技术分享,您的支持是我创作的动力.