使用隱藏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長度的限制,無論你需要傳的參數有多少個都可以正確下載!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM