javascript - Web开发 - Angular Post导出显示乱码

查看:92
本文介绍了javascript - Web开发 - Angular Post导出显示乱码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

前端Angular的Post导出Excel,内容全部乱码(不是文件名),而Get方式导出没问题

    $http({
        url: "",
        method: 'POST',
        timeout: 60000,
        headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=utf8'},
        transformRequest: function(obj) {
            var str = [];
            for(var p in obj)
                str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
            return str.join("&");
        },
        data:{}
    }).success(function (data) {
        var blob = new Blob([data], {type: "application/vnd.ms-excel;charset=utf-8"}),
            Temp = document.createElement("a");
    
        Temp.href = window.URL.createObjectURL(blob);
        Temp.download = "XXX.xlsx";
        angular.element('body').append(Temp);
        Temp.click();
    });
 

@RequestMapping(value = "/downloadExcelTemplate.do")
    public void downloadExcelTemplate(HttpServletRequest request, HttpServletResponse response) {
        OutputStream os = null;
        try {
            XSSFWorkbook book = new XSSFWorkbook();
            XSSFSheet sheet = book.createSheet("XXX");
            XSSFRow rowTitle = sheet.createRow(0);
            
            String fileName = "XXX"+"."+Constant.XLSX;
            os = response.getOutputStream();
            response.setCharacterEncoding(Constant.UTF);
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, Constant.UTF));
            book.write(os);
            os.flush();
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        } finally {
            try {
                os.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

解决方案

1、Post必须使用 responseType: 'arraybuffer'

2、Get请求

var aEle = document.createElement("a");
aEle.setAttribute("href", ); // 传中文值encodeURIComponent()
aEle.click();

这篇关于javascript - Web开发 - Angular Post导出显示乱码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆