Spring Boot + ajax实现post方式带参数下载

【业务场景】
项目中需要实现查询后的数据导出为Excle,所以需要向服务端传递搜索条件
传送门:导出为Excle的实现方法

【处理方式】
整体思路:前端模拟表单进行提交,服务端接收表单参数,处理下载请求

前端:

function postExcelFile(params, url) {
    
     //params是post请求需要的JSON格式参数,url是请求url地址
        var form = document.createElement("form");
        form.style.display = 'none';
        form.action = url;
        form.method = "post";
        form.enctype = 'multipart/form-data';
        document.body.appendChild(form);


        var input = document.createElement("input");
        input.type = "hidden";
        input.name = 'aboutdownloadExcle';
        input.value = JSON.stringify(params);
        form.appendChild(input);


        form.submit();
        form.remove();
    }

服务端

	@ResponseBody
    @RequestMapping("/downloadExporExcle")
    //@RequestParam("aboutdownloadExcle")与前端name对应
    public void downloadExporExcle(HttpServletResponse response, @RequestParam("aboutdownloadExcle")String aboutdownloadExcle) {
    
    

        JSONObject obj = JSONObject.fromObject(aboutdownloadExcle);
        
		// **  业务逻辑开始  **
		
        Integer pid = Integer.valueOf(obj.get("pid").toString());
        //通过图层id获取字段信息
        List<FieldParameter> fieList = fieldpser.selectByFPid(pid);
        //通过图层id获取图层对象
        LayerParameters layerparame = layerpserver.selectLayerParameterByPid(pid);

        //查询字段
        String fieldList = obj.get("fieldList").toString();
        String levelnumList = obj.get("levelnumList").toString();
        
        // **  业务逻辑结束  **
        
        //查询后数据的数据
        List<Map<String, Object>> getMessAboutExcle = fileser.getMessAboutExcle(pid, fieldList,levelnumList, layerparame.getpNameEn());

		//Excle处理
        ExportExcel export = new ExportExcel();
        HSSFWorkbook hs = export.exportExcel(fieList, getMessAboutExcle);

        try {
    
    
            // 清空response
            response.reset();
            // 设置response的Header,设置下载文件名
            response.setHeader("Content-Disposition", "inline;fileName=\"" + new String((layerparame.getpNameCn() + ".xls").getBytes("utf-8"),"ISO8859-1") + "\"");
//            response.addHeader("Content-Length", "" + .length());
            response.setContentType("application/vnd.ms-excel;charset=utf-8");

            OutputStream os = response.getOutputStream();
            hs.write(os);
            os.close();
            hs.close();

        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_42547014/article/details/109404910
今日推荐