使用隐藏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 = 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长度的限制,无论你需要传的参数有多少个都可以正确下载!
使用隐藏form表单下载文件,解决url方式下载,由于环境问题而限制url长度,满足不了所有的需求!的更多相关文章
- Form 表单提交的几种方式
简单的总结一下form表单提交的几种方式:1.最简单的方式 就用form的submit提交方式,这种提交方式是不需要回调函数的 这种方式最近到一个form提供action路径后台接受就可以< ...
- Ajax提交Form表单及文件上传
刚刚申请下来的博客,写得第一篇.有点小激动,本人以前是一名工业3D设计师突然有些变故做上了JavaWeb开发: 前几天,发现了一些小问题.我在写后台管理页面时,需要上传一张图片.于是我就用很普通的Fo ...
- .net c# 提交包含文件file 的form表单 获得文件的Stream流
1.前台html代码 要写一个有id的form,可是不能有runat="server"属性.由于一个页面中,有这个属性的form表单仅仅能有一个. 再要有一个有name的ifram ...
- Django的form表单之文件上传
在生成input标签的时候可以指定input标签的类型为file类型 <!DOCTYPE html> <html lang="en"> <head&g ...
- form表单的两种提交方式,submit和button的用法
1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在jsp的前端页面写:有两种方法,一种是用submit提交.一种是用button提交.方法一: 在jsp的前端页面的 ...
- 触发form表单的两种提交方式,submit和button的用法
1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在jsp的前端页面写:有两种方法,一种是用submit提交.一种是用button提交. 方法一: 在jsp的前端页面 ...
- 【转载】form表单的两种提交方式,submit和button的用法
1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在jsp的前端页面写:有两种方法,一种是用submit提交.一种是用button提交.方法一: 在jsp的前端页面的 ...
- php+form表单的文件上传
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- 2020最新Servlet+form表单实现文件上传(图片)
servlet实现文件上传接受 这几天学了一点文件上传,有很多不会,在网查了许多博客,但是最新的没有,都比较久了 因为我是小白,版本更新了,以前的方法自己费了好久才弄懂,写个随笔方便以后查找 代码奉上 ...
随机推荐
- JavaScript的setTimeout()和setInterval()
1. setTimeout()方法 作用:在制定的毫秒数后调用函数或计算表达式 语法: setTimeout(code,millisec) 实例: function timedMsg() { var ...
- 环形buffer缓冲区
#include <stdio.h> #include <string.h> #include <malloc.h> struct CircleBuf { char ...
- 红黑树 Java实现
概要 前面分别介绍红黑树的理论知识.红黑树的C语言和C++的实现.本章介绍红黑树的Java实现,若读者对红黑树的理论知识不熟悉,建立先学习红黑树的理论知识,再来学习本章.还是那句老话,红黑树的C/C+ ...
- java追加写入txt文件
整理了下网上的资料,数据追加写入txt文件有三种方式,见下面代码: 方法一: public void method1() { FileWriter fw = null; try { //如果文件存在, ...
- 我的shell脚本
问题:在ip.lt文件中有600个IP,有3个文档模版,三个文档的名称结构都是“ip+一系列字符串”,要求:1.将600个IP分成3分,以三个模版为基础创建600个文档,名字结构与模版相同:2修改60 ...
- 【BZOJ3884】上帝与集合的正确用法
Description 一句话题意,给定\(p\)作为模数: \(p\le 10^7\),数据组数\(T\le1000\). Solution 看到就弃疗了,再见...... 将模数\(p\)拆分成\ ...
- INSTALL_FAILED_TEST_ONLY: installPackageLI. 问题解决
FAQ: Installation failed with message Failed to finalize session : INSTALL_FAILED_TEST_ONLY: install ...
- 解题:JSOI 2007 重要的城市
题面 考虑一个点$x$,如果某两个点$u,v$间的所有最短路都经过$x$,那么$x$肯定是重要的.这个题$n$比较小,所以我们直接跑floyd,在过程中记录 当发生松弛时,我们具体讨论: 如果这个长度 ...
- 解题:洛谷2633 Count on a tree
题面 在树上建主席树...... 每个点从父亲那里建过来,最后建出来就是从根到$i$这条链上的主席树,查询的时候一边差分一边查询 ($cmt[u]+cmt[v]-cmt[lca(u,v)]-cmt[a ...
- (二)C语言文本流和二进制流的区别
转至:http://www.cnblogs.com/xiangzi888/archive/2011/11/10/2244336.html 一.首先回答,什么是文件,流 一个文件通常就是磁盘上的一段命名 ...