一 對於某些環境導出是直接用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長度的限制,無論你需要傳的參數有多少個都可以正確下載!