九月999 2023-02-28 14:11 采纳率: 90%
浏览 16
已结题

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

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

img


controller

img

service

img

生成方法

img

  • 写回答

3条回答 默认 最新

  • 程序yang 全栈领域优质创作者 2023-02-28 15:23
    关注

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

    没有响应:需要在后端响应中设置正确的响应头以便前端可以成功下载文件。您需要设置响应头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文件并进行下载。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月28日
  • 创建了问题 2月28日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分