使⽤隐藏form表单下载⽂件,解决url⽅式下载,由于环境问题⽽限
制url长度,满⾜不了所。。。
⼀对于某些环境导出是直接⽤wiondow.href=url直接导出下载,有些业务需求,如员⼯档案等字段⽐较多的时候,全选导出就会引发异常,由于Nginx转发长度限制的问题,
如果运维不愿意改变环境,只能硬着头⽪修改程序了,即由原来的get⽅式改为POST,ajax⽅式是不能下载⽂件的,因为会把⽂件流直接返回到回调函数中,所以这⾥采取隐藏form表单下载
后台接⼝修改为POST接受⽅式:
@SuppressWarnings("rawtypes")
@RequestMapping(value = "/common", method = RequestMethod.POST)
public void export(@RequestParam Map map, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
File file = port(map);
downLoad(httpServletResponse, httpServletRequest, file);
}
前台使⽤form表单提交数据:
// window.location = ls.addPer(url);
let url = '/minierp/sys/export/common'
var form = $("<form>");  //定义⼀个form表单
form.attr('style', 'display:none');  //在form表单中添加查询参数
url编码处理form.attr('target', '');
form.attr('method', 'post');
form.attr('action', url);
var input1 = $('<input>');
input1.attr('type', 'hidden');
input1.attr('name', 'exportTitle');
input1.attr('value', me.exportTitle);
  这⾥注意⼀点:先不要着急设置表单编码⽅式,先试试看后台能不能接受到你需要提交的参数,我再这⾥就是因为第⼀次主动设置了编码参数,⼀直报415错误,后来第⼆次不设置,直接⼀次成功!(活见⿁)
需要的参数就全部设置为隐藏input输⼊框即可,有多少都没问题!,value也⽆论是什么值(数组,字符,list,map等)
最后提交表单即可:
$('body').append(form);  //将表单放置在web中
form.append(input1);  //将查询参数控件提交到表单上
form.append(input2);
form.append(input3);
form.append(input4);
form.append(input5);
form.append(input6);
if (me.appType != undefined) {
var input7 = $('<input>');
input7.attr('type', 'hidden');
input7.attr('name', 'appType');
input7.attr('value', me.appType);
form.append(input7);
}
form.submit();
  这个时候,就解决了url长度的限制,⽆论你需要传的参数有多少个都可以正确下载!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。