使用隐藏form表单下载文件,解决url方式下载,由于环境问题而限制url长度,满足不了所有的需求!...

本文介绍了一种通过将GET请求转换为POST请求来解决因URL长度限制导致的导出异常问题的方法。该方法适用于导出大量数据时遇到Nginx转发长度限制的情况,通过使用隐藏的form表单提交数据,可以有效避免此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 对于某些环境导出是直接用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 = exportServlce.export(map);
        downLoad(httpServletResponse, httpServletRequest, file);
    }

前台使用form表单提交数据:

// window.location = gyz.tools.addPer(url);
			let url = '/minierp/sys/export/common'

			var form = $("<form>");   //定义一个form表单  
			form.attr('style', 'display:none');   //在form表单中添加查询参数  
			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长度的限制,无论你需要传的参数有多少个都可以正确下载!

转载于:https://www.cnblogs.com/houzheng/p/8990249.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值