解决前端js传中文----中文乱码(下载Excel文档)

解决前端js传中文----中文乱码(下载Excel文档),第1张

解决前端js传中文----中文乱码下载Excel文档) js中文乱码

1.js页面代码
encodeURIComponent(fileName)

    //下载批量导入模板
    $("#downloadFile").on('click',function () {
        var fileName="派单规则批量上传模板.xlsx";
        //防止-中文乱码
        fileName = encodeURIComponent(fileName);
        //fileName = encodeURI(fileName)
        var url=commonAddress()+"/download/template?fileName="+fileName;
        window.location.href=url;
    });

2.后端控制台–获取
filename = java.net.URLEncoder.encode(filename, “UTF-8”);

// 非IE浏览器的处理:
filename = new String(filename.getBytes(“UTF-8”), “ISO-8859-1”);

private static final String FIXED_PATH = "static/excel/";

private static final String USER_AGENT_MSIE = "MSIE";

private static final String USER_AGENT_TRIDENT = "Trident";

@RequestMapping("/template")
    @ResponseBody
    public void downloadTemplate(@RequestParam Map params, HttpServletResponse response, HttpServletRequest request)throws IOException {
        log.debug("DownloadController{}==>downloadTemplate()");
        InputStream inputStream = null;
        OutputStream os = null;
        try{
            String path = Thread.currentThread().getContextClassLoader()
                    .getResource("").getPath()+FIXED_PATH+params.get("fileName");
            inputStream  = new FileInputStream(new File(path));
            //假如以中文名下载的话,设置下载文件名称
            String filename = params.get("fileName");
            // 针对IE或者以IE为内核的浏览器:
            String userAgent = request.getHeader("User-Agent");
            if (userAgent.contains(USER_AGENT_MSIE) || userAgent.contains(USER_AGENT_TRIDENT)) {
                filename = java.net.URLEncoder.encode(filename, "UTF-8");
            } else {
                // 非IE浏览器的处理:
                filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
            }
            //设置文件下载头
            response.addHeader("Content-Disposition", String.format("attachment; filename="%s"", filename));
            //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
            response.setContentType("multipart/form-data");
            response.setCharacterEncoding("UTF-8");
            os = response.getOutputStream();
            byte[] b = new byte[2048];
            int len;
            while((len = inputStream .read(b)) > 0){
                os.write(b, 0, len);
            }
        }catch (Exception e){
            log.error(e.getMessage());
        } finally {
            if(os != null) {
                try {
                    os.close();
                } catch (Exception e) {
                    log.error(e.getMessage());
                }
            }
            if(inputStream != null) {
                try {
                    inputStream.close();
                } catch (Exception e) {
                    log.error(e.getMessage());
                }
            }
        }
    }

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5708047.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存