Spring 中 MultipartResolver

今天看了一下,MultipartResolver,总结一下
spring的MultipartResolver可以帮助上传文件,
先看定义

public interface MultipartResolver {
     boolean isMultipart(HttpServletRequest request);
     MultipartHttpServletRequest resolverMultipart(HttpServletRequest request);
     void cleanupMultipart(MultipartHttpServletRequest request);
}

当用户的请求到DispatcherServlet时,

1, DispatcherServlet会先在webapplicationContext.xml中找一个名为“multipartResolver”的bean.

2, 如果有,则调用MultipartResolver的第一个方法,该方法会返回这个请求是否是通过enctype=”multipart/form-data”方式提交的,如果是,则调用第二个方法的,这个方法会把当前的HttpServletRequest换成MultipartHttpServletRequest,并传给后面的Controller处理

3, 如果没有这个bean(也可以修改DispatcherServlet的 MULTIPART_RESOLVER_BEAN_NAME属性来修改查找的名字),或者第一个方法没有返回true,则不做处理,继续传递HttpServletRequest

大费周章把HttpServletRequest换成MultipartHttpServletRequest,再来看看spring怎么定义这个HttpServletRequest的,

public interface MultipartHttpServketRequest extends HttpServletRequest,MultiPartRequest{
}

public interface MultipartRequest{
    Iterator getFileNames();
    MultipartFile getFile(String name);
    Map getFileMap();
}

MultipartHttpServletRequest的附加能力来自父接口,

简单的说现在处理文件上传的Controller可以直接通过

MultipartHttpServletRequest request = (MultipartHttpServletRequest)request;
MultipartFile file = request.getFile("fileName");

得到上传的文件,之后怎么操作就看你的需要

而当你使用玩MultipartResolver后,DispatcherServlet将保证调用,该接口的第三个方法,来释放系统资源,这样也大大方便了。

spring为MultipartResolver提供两个可用的实现类:
org.springframework.web.multipart.commons.CommonsMultipartResolver(CommonsFileUpload类库实现,要倒包)
org.springframework.web.multipart.cos.CosMultipartResolver(OreillyCos类库实现,倒包)

当然这两个类其中还有一些属性,来控制文件上传的行为,比如: “maxUploadSize”, “maxInMemorySize” and “defaultEncoding”
这些属性都是继承来的,如图这里写图片描述

如果不去关心细节的话,简单的用法就这样。(还是应该多看源码。。o.o)

望道友指正!

(还有一个,以前上传图片的时候都是上传到项目之外的其他盘,今天发现一个问题,在网络上读服务器其他盘的图片的时候有个小问题,当你在其他电脑上传后读取图片的时候,浏览器会出现“Not allowed to load local resource”,最好是方法项目中,然后读取就不会出现这个错了)

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值