简单来说就是spring上传的io流上传。
我前端用的angularjs 的一个上传文件的插件,同时显示上传的进度,发现当进度是100%的时候后台才开始工作,然而老板也要求用io流传输,便开始疯狂的 百度 bing,都没找到原因。写了个serclet的demo发现这是spring 的问题,就想到了
spring 的一个bean:
<bean id="multipartResolver"
class="com.shinewonder.oneshot.util.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="10485760000"></property>
<property name="maxInMemorySize" value="40960"></property>
</bean>
当时上传图片用的这个bean.我把这个注释后,后台会立即响应,但是上传图片的controller会报错。
当你配置了这个bean上传文件时spring 会封装request,spring会先缓存文件,然后才会访问你的controller。
上网查的是重写CommonsMultipartResolver但是他是为了解决自己封装的request,但是思路是一样的,于是我查看了源码,发现控制spring封装的是isMultipart()于是我重写了这个方法,在里面过滤了我要io流上传的文件:
public class CommonsMultipartResolver extends org.springframework.web.multipart.commons.CommonsMultipartResolver {
@Override
public boolean isMultipart(HttpServletRequest request) {
if(request.getRequestURI().indexOf("需要过滤的url")>=0)
return false;
else return request != null && ServletFileUpload.isMultipartContent(request);
}
}
后台就是用的request来获取io流,处理文件