poi生成exceli后如何在前端访问下载

poi生成exceli后如何在前端访问下载。我的一直没法响应下载内容,能帮忙看看什么情况嘛
前端请求

img


controller

img

service

img

生成方法

img

对你的代码进行了一下改动,仅供参考:

没有响应:需要在后端响应中设置正确的响应头以便前端可以成功下载文件。您需要设置响应头Content-Disposition的值为"attachment;filename=文件名.xls",其中文件名为您要下载文件的名称,同时要注意文件名需要进行URL编码。

另外,您还需要在前端的AJAX请求中设置responseType为"blob",以便获取二进制数据流并保存为文件。


@RequestMapping("/downloadTemplate")
public ResponseEntity<byte[]> downloadTemplate(String projMxcellId, String slMxcellId) throws IOException {
    // 生成Excel
    HSSFWorkbook workbook = new HSSFWorkbook();
    this.exportExcel(workbook);

    // 设置响应头
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    headers.setContentDispositionFormData("attachment", "测试模板.xls");

    // 返回Excel二进制数据流
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    workbook.write(out);
    return new ResponseEntity<>(out.toByteArray(), headers, HttpStatus.OK);
}

private void exportExcel(HSSFWorkbook workbook) {
    // 创建sheet等
    ...
}
$.ajax({
    url: "${ctx}/qh/eval/downloadTemplate?projMxcellId=" + projMxcellId + "&slMxcellId=" + slMxcellId,
    type: "GET",
    xhrFields: {
        responseType: "blob"
    },
    success: function(data) {
        // 下载文件
        var a = document.createElement("a");
        var url = window.URL.createObjectURL(data);
        a.href = url;
        a.download = "测试模板.xls";
        a.click();
        window.URL.revokeObjectURL(url);
    },
    error: function(xhr, status, error) {
        console.error(error);
    }
});

请注意,上述代码中的URL链接需要根据您的具体情况进行修改,以便正确获取Excel文件并进行下载。

前端不太清楚啊,后端的话,目测看你代码没什么问题,想要调接口,直接postman选一下send按钮(send and download)就可以下载了

img