浏览器自动下载文件

1. 直接导出文件

1.1 导出xlsx表格

使用插件easyExcel

		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.3.2</version>
        </dependency>
	@GetMapping("/testXlsx/{id}")
    @ApiOperation("导出-编号")
    public void exportArrangeXlsx(@PathVariable("id") Integer id, HttpServletResponse response) throws IOException {

		//要导出的数据
        List<ExportVO> exportXlsx = exportServer.export(id);

        // 这里注意 使用swagger可能会导致各种问题,请直接用浏览器或者用postman
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String testName = "test.xlsx";
        String fileName = URLEncoder.encode(testName , "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");

        EasyExcel.write(response.getOutputStream(), ExportVO.class)
                .sheet("test")
                .doWrite(() -> exportXlsx);
    }

1.2 导出docx文档

使用插件ap-poi ,官方文档:https://deepoove.com/poi-tl/1.10.x/

			<dependency>
                <groupId>com.deepoove</groupId>
                <artifactId>poi-tl</artifactId>
                <version>1.12.2</version>
            </dependency>
	@GetMapping(value = "/testDocx/{id}")
    @ApiOperation("导出-检录名单【需要合并素质三项】")
    public void exportCheckList2(@PathVariable("id") Integer matchId,HttpServletResponse response) throws IOException {
        XWPFTemplate template = exportServer.exportCheckList2(matchId);

        String fileName = "test.docx";

		// 设置响应头
        fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);

        // 写入文件到响应输出流
        try (ServletOutputStream out = response.getOutputStream()) {
            template.write(out);
        }

        // 关闭模板
        template.close();
    }

1.3 前端js部分代码

export const saveFile = (response, fileName = '') => {
    //获取文件名
    if (fileName === '') {
        fileName = response.headers["content-disposition"].split(";")[1].split("=")[1];
        // 转中文字符
        fileName = decodeURIComponent(fileName);
        console.log(fileName);
    }
	...
}

1.4 浏览器显

查看响应头
在这里插入图片描述
控制台:
在这里插入图片描述

2.以压缩包的形式导出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值