#java web#文件下载时需向后台传递大量参数
2017-07-07 16:03
363 查看
今天写的一个下载功能发现了一个问题:
这个下载的功能是将前台获取的数据传递到后台之后下载成excel文件,我就写了一个方法:
其中details就是要传递的数据,我把它编码之后传到后台进行处理。
本来数据量不大的时候是没有问题的,然后写了几百条数据进去了之后下载就出现问题了。点击下载一直未响应。
百度之后发现:通过url传递数据使用的是get方式,是有大小限制的。很多文章都说GET方式提交的数据最多只能是1024字节。
而实际上,URL不存在参数上限的问题,HTTP协议规范也没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35字节)。对于其他浏览器,如FireFox,Netscape等,则没有长度限制,这个时候其限制取决于服务器的操作系统。即如果url太长,服务器可能会因为安全方面的设置从而拒绝请求或者发生不完整的数据请求。
而使用post传递数据理论上是没有限制的。
所以,在url中传递数据,如果传递的数据过多,就可能会发生错误。
因此直接在下载的url中传递大量数据是不可行的。
所以我做了如下修改:
先使用ajax的post方式将数据传送到后台,将数据保存到session中,在访问下载数据的url,从session中获取数据然后进行处理、下载。这样可以避免出现问题。
这个下载的功能是将前台获取的数据传递到后台之后下载成excel文件,我就写了一个方法:
window.location.href = $("#basePath").val() + "purPlan/exportDetail.do?details="+ encodeURI(JSON.stringify(details));
其中details就是要传递的数据,我把它编码之后传到后台进行处理。
本来数据量不大的时候是没有问题的,然后写了几百条数据进去了之后下载就出现问题了。点击下载一直未响应。
百度之后发现:通过url传递数据使用的是get方式,是有大小限制的。很多文章都说GET方式提交的数据最多只能是1024字节。
而实际上,URL不存在参数上限的问题,HTTP协议规范也没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35字节)。对于其他浏览器,如FireFox,Netscape等,则没有长度限制,这个时候其限制取决于服务器的操作系统。即如果url太长,服务器可能会因为安全方面的设置从而拒绝请求或者发生不完整的数据请求。
而使用post传递数据理论上是没有限制的。
所以,在url中传递数据,如果传递的数据过多,就可能会发生错误。
因此直接在下载的url中传递大量数据是不可行的。
所以我做了如下修改:
//前台 $.ajax({ url : "purPlan/postDetailsData.do", type : "post", dataType : "json", data : { details : JSON.stringify(details) }, success : function(data){ if(data && data.success){ window.location.href = $("#basePath").val() + "purPlan/exportDetail.do"; }else{ $.dialog.alert("出现问题!"); } } }); //后台 @RequestMapping("/postDetailsData.do") public void postDetailsData(HttpServletRequest request,HttpServletResponse response,HttpSession session,String details){ session.setAttribute("details", details); this.writeJson(response, new AjaxMsg(true,"传递数据成功")); } @RequestMapping(value = "/exportDetail.do") public void exportDetail(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws Exception{ String details = (String) session.getAttribute("details"); //将明细字符串转化为fmodel List<FPurPlanDetail> detailList = JsonParse.getList(details , FPurPlanDetail.class); ExportHelp.compatibleFileName(request, response, "物资导出"); PurPlanExport.exportExcel(response,detailList); }
先使用ajax的post方式将数据传送到后台,将数据保存到session中,在访问下载数据的url,从session中获取数据然后进行处理、下载。这样可以避免出现问题。
相关文章推荐
- JavaWeb从后台下载文件
- 使用webUploader上传文件时前台添加自定义参数(java后台获取)
- Java Web中前台与后台传递参数小结
- java后台接受web前台传递的数组参数
- Java-WEB文件上传下载例程
- java web 实现 文件上传及下载
- JAVA应用XFire框架来实现WebServie的大文件传输功能之一(下载)
- JAVA应用XFire框架来实现WebServie的大文件传输功能之一(下载)
- JAVA Web 之 struts2文件上传下载演示(二)(转)
- Java乔晓松-文件的上传和下载(Web)
- Portal-Basic Java Web 应用开发框架:应用篇(四) —— 文件上传和下载
- Web项目中使用java Struts2实现Zip、xml文件的动态创建和下载(Zip文件中动态存在多个xml文件)
- java web应用文件下载(包括中文文件名乱码处理)
- Java从web服务器下载文件到本地
- java实现文件下载的工具类-----------什么都可以下载,只要传入response和文件路径 两个参数
- java-web文件上传下载
- Java Web_web配置传递参数到servlet
- java web应用文件下载(包括中文文件名乱码处理)
- URL中传递中文参数 以流形式文件上传下载 演变
- java resteasy restful webservice教程(六):实现文件下载功能实例文章来源:爱上123 原文地址:http://www.ishang123.com/jishubowen/