springboot下载接口编写(前后端分离rest下载接口)

功能需求:浏览器直接敲URL就可以下载文件,也就是前端触发后端提供的GET接口,就可以下载文件。

1、Controller

//根据userId查询数据,处理逻辑之后生成excel客户端下载
@GetMapping("/downloadUser")
@ApiOperation(value="下载用户数据", notes="")
public void downloadUser(String userId, HttpServletResponse response){
    
    
	//下载的请求给客户端的返回可以为void,占用的是客户端的响应流,往它写入数据
	tDpCountsService.downloadUserData(deviId, response);
}

2、Service

//生成用户excel用户数据
int downloadUserData(String userId, HttpServletResponse response);

3、Impl

	@Override
    public int downloadUserData(String deviId, HttpServletResponse response) {
    
    
        String filename = "test.xls";
		
		//可以使用Mapper进行数据库查询
		//可以查询redis
		//可以从查询业务数据

		//一个简单的测试Bean,将来放到list里边通过hutool的ExcelWriter生成excel
        DownloadDatasVo downloadDatasVo = new DownloadDatasVo();
        downloadDatasVo.setUserName(userName);
        downloadDatasVo.setAddress(address);
        List<DownloadDatasVo> rows = CollUtil.newArrayList(downloadDatasVo);

        // 通过工具类创建writer,默认创建xls格式
        ExcelWriter writer = ExcelUtil.getWriter();
        //自定义标题别名
        writer.addHeaderAlias("userName", "用户姓名");
        writer.addHeaderAlias("address", "用户地址");
        writer.setOnlyAlias(true);
        //设置列宽
        writer.setColumnWidth(1, 20);
        //设置标题
        writer.merge(2, "用户数据");
        writer.write(rows, true);
        
        //out为OutputStream,需要写出到的目标流
        //response为HttpServletResponse对象
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
        response.setHeader("Content-Disposition","attachment;filename="+filename);
        ServletOutputStream out= null;
        try {
    
    
            out = response.getOutputStream();
        } catch (IOException e) {
    
    
            throw new ServiceException("生成用户数据异常");
        }

        writer.flush(out, true);
        // 关闭writer,释放内存
        writer.close();
        //此处记得关闭输出Servlet流
        IoUtil.close(out);

        return 0;
    }

猜你喜欢

转载自blog.csdn.net/csdn_avatar_2019/article/details/129077921