完美处理SpringMVC文件上传的一系列问题(无法获取参数、断点、分片等)
来源:互联网 发布:算法还是编码 编辑:程序博客网 时间:2024/06/07 00:27
问题1 使用@RequestParam或者用request.getParameter无法获取参数的问题
这个问题就是由于multipart/form-data这种上传方式引起的问题,会造成二进制数据
如何解决
resolver1:愚蠢的方法
在表单提交的form的action后面直接附加?param=param的形式,简单粗暴,但是某些业务场景不允许这么做
tips:onSubmit="return validate();"是表单提交前的回调方法
resolver2:繁琐的方法
修改成自定义的mutipartResolver
<bean id="multipartResolver" class="com.common.web.MyMultipartResolver"><!-- url中带有uploadAttach1的http请求就不会被multipartResolver先解析--><property name="excludeUrls" value="uploadAttach1,officeServer"/><property name="maxUploadSize" value="${web.maxUploadSize}" /></bean>
public class MyMultipartResolver extends CommonsMultipartResolver { private String excludeUrls; private String[] excludeUrlArray; public String getExcludeUrls() { return excludeUrls; } public void setExcludeUrls(String excludeUrls) { this.excludeUrls = excludeUrls; this.excludeUrlArray = excludeUrls.split(","); } /** * 这里是处理Multipart http的方法。如果这个返回值为true,那么Multipart http body就会MyMultipartResolver 消耗掉.如果这里返回false * 那么就会交给后面的自己写的处理函数处理例如刚才ServletFileUpload 所在的函数 * @see org.springframework.web.multipart.commons.CommonsMultipartResolver#isMultipart(javax.servlet.http.HttpServletRequest) */ @Override public boolean isMultipart(HttpServletRequest request) { for (String url: excludeUrlArray) { // 这里可以自己换判断 if (request.getRequestURI().contains(url)) { return false; } } return super.isMultipart(request); } }
//如果是Multipart上传则是文件信息if (ServletFileUpload.isMultipartContent(request)){try {DiskFileItemFactory factory = new DiskFileItemFactory();factory.setSizeThreshold(1024);ServletFileUpload upload = new ServletFileUpload(factory);upload.setHeaderEncoding("UTF-8");List<FileItem> items = upload.parseRequest(request);for(FileItem item : items){
//item文本域
if(item.isFormField()){if(item.getFieldName().equals("name")){fileName = new String(item.get(),"UTF-8");}else if(item.getFieldName().equals("chunk")){使用fileupload中的方法,防止被mutipartResolver过滤,直接判断文件域和文本域
比较繁琐
resovler3:看代码
ShiroHttpServletRequest shiroRequest = (ShiroHttpServletRequest) request;CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();MultipartHttpServletRequest multipartRequest = commonsMultipartResolver.resolveMultipart((HttpServletRequest) shiroRequest.getRequest()); String aa = multipartRequest.getParameter("aa");这里集成了shiro所以要这么处理下下
有意思吧,只要按照任意一种处理方式,都可以完美解决此问题
0 0
- 完美处理SpringMVC文件上传的一系列问题(无法获取参数、断点、分片等)
- 大文件分片断点上传显示进度条
- JS异步文件分片断点上传
- SpringMVC 使用uploadify插件上传文件,post方法无法直接获取参数问题
- 后端springmvc,前端html5的FormData实现文件断点上传
- HttpUrlconnection 实现大文件分片断点上传,支持Https
- springMVC获取上传文件
- React Native 的Image 保存、Picker、上传等一系列问题
- webuploader在springMVC+jquery+Java开发环境下的大文件分片上传
- 分片上传(断点续上传)原理
- multipart/form-data 文件上传表单中 传递参数无法获取的原因!
- webuploader文件分片上传与springmvc后台合并
- 无法获取weblogic的数据源引发的一系列问题
- springmvc 文件上传异步处理
- SpringMVC 上传文件异常处理
- springmvc上传文件路径处理
- php 无法上传大文件完美解决方案
- 读取配置参数的properties文件,路径获取完美解决
- hihocoder#1015:(KMP)
- 自己写控制浮点数显示位数
- Mysql注入之一 联合注入
- Linux service network restart重启网络失败
- c++中的vector
- 完美处理SpringMVC文件上传的一系列问题(无法获取参数、断点、分片等)
- c语言指针链表
- POJ 3517 And Then There Was One 可能会
- VS2010鼠标变为灰色块的解决方案
- 倒计时有三种写法
- JDBC与JSP初识
- Leetcode-415. Add Strings
- Android原生与H5交互的实现
- 悟道