1.前端from表达提交参数,所要下载的文件路径为其他系统数据,因此,本地后台需要写个请求去得到数据,直接上代码
前端请求参数:
var jsonParam = {
title : title,
partPath : partPath,
modelId : modelId,
exportTemplate : exportTemplate,
officeCode : officeCode,
orderNo : orderNo,
currentUserId : currentUserId,
newTitle : newTitle,
exportFileType : exportFileType,
fileType : fileType
};
var form = document.createElement("form");
form.setAttribute("method", "get");
form.setAttribute("action", "/uploadFile/getLuoHuoPaperDownLoad.do");
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "param");
hiddenField.setAttribute("value", JSON.stringify(jsonParam));
form.appendChild(hiddenField);
document.body.appendChild(form);
form.submit();
后端代码展示,转译字符格式是参数的形式,此处参数不认String类型,所以得先转化,转化后因为是GET请求,则直接拼接到HttpGet 里面的url后面,url为动态的的获取,根据项目需要本地自行截取转化。如url不变,可以直接写死。execute发送之后获取到的是文件流,则直接输出,自己设置文件名。这样,文件流就输出到文件里啦。
/*
* 获取落货纸打印数据
*/
@RequestMapping(value = "getLuoHuoPaperDownLoad.do", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity getLuoHuoPaperDownLoad(HttpServletRequest request, HttpServletResponse httpResponse) throws Exception {
ResponseEntity re = new ResponseEntity();
HttpClient client = HttpClients.createDefault();
//转译字符格式
List<BasicNameValuePair> list = new ArrayList<>();
BasicNameValuePair bn= new BasicNameValuePair("param",request.getParameter("param"));
list.add(bn);
String paramsStr = EntityUtils.toString(new UrlEncodedFormEntity(list, "UTF-8"));
//获取文件名
String jsonResult = request.getParameter("param");
JSONObject jsonObject = new JSONObject(jsonResult);
String orderNo = jsonObject.getString("orderNo");
String url = Config.get("url.llnQuery");
if (!StringUtils.isBlank(url)) {
url = url.substring(0, url.length()-17);
}
HttpGet get = new HttpGet(url+"/servlet/EcExportTemplateServlet?"+paramsStr);
HttpResponse responsecfs;
responsecfs = client.execute(get);
HttpEntity output = responsecfs.getEntity();
httpResponse.setHeader("Pragma", "public");
httpResponse.setHeader("Expires", "0");
httpResponse.setHeader("Cache-Control",
"must-revalidate, post-check=0, pre-check=0");
httpResponse.setHeader("Content-Type", "application/force-download");
httpResponse.setHeader("Content-Disposition", "attachment;filename="+orderNo+".xls");
httpResponse.setContentType("text/html; charset=utf-8");
OutputStream outPut1 = httpResponse.getOutputStream();
output.writeTo(outPut1);
outPut1.flush();
outPut1.close();
return re;
}
记住,最后一定要关闭,这里重点只是将连接获取文件流,一般还得写上捕获异常,finally里面关闭文件流,一定得关闭,不然一致打开会造成服务器压力。